位置: 编程技术 - 正文

PHP中array_keys和array_unique函数源码的分析(array php)

编辑:rootadmin

推荐整理分享PHP中array_keys和array_unique函数源码的分析(array php),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:php中array什么意思,php array_splice,php中array用法,array_keys php,php array_splice,php中array用法,php array_splice,php array keys,内容如对您有帮助,希望把文章链接给更多的朋友!

性能分析

从运行性能上分析,看看下面的测试代码:

运行结果如下:

从上图可以看到,使用array_unique函数需要0.s;使用array_flip后再使用array_keys函数需要0.s;使用两次array_flip函数需要0.s。

测试结果表明,使用array_flip后再调用array_keys函数比array_unique函数快。那么,具体原因是什么呢?让我们看看在PHP底层,这两个函数是怎么实现的。

PHP中array_keys和array_unique函数源码的分析(array php)

源码分析

以上是array_keys函数底层的源码。为方便理解,笔者添加了一些中文注释。如果需要查看原始代码,可以点击查看。这个函数的功能就是新建一个临时数组,然后将键值对重新复制到新的数组,如果复制过程中有重复的键值出现,那么就用新的值替换。这个函数的主要步骤是地和行调用的zend_hash_next_index_insert函数。该函数将元素插入到数组中,如果出现重复的值,则使用新的值更新原键值指向的值,否则直接插入,时间复杂度是O(n)。

上面就是是array_flip函数的源码。点击链接查看原始代码。这个函数主要的做的事情就是创建一个新的数组,遍历原数组。在行开始将原数组的值赋值为新数组的键,然后在行开始将原数组的键赋值为新数组的值,如果有重复的,则使用新值覆盖旧值。整个函数的时间复杂度也是O(n)。因此,使用了array_flip之后再使用array_keys的时间复杂度是O(n)。

接下来,我们看看array_unique函数的源码。点击链接查看原始代码。

可以看到,这个函数初始化一个新的数组,然后将值拷贝到新数组,然后在行调用排序函数对数组进行排序,排序的算法是zend引擎的块树排序算法。接着遍历排序好的数组,删除重复的元素。整个函数开销最大的地方就在调用排序函数上,而快排的时间复杂度是O(nlogn),因此,该函数的时间复杂度是O(nlogn)。

结论

因为array_unique底层调用了快排算法,加大了函数运行的时间开销,导致整个函数的运行较慢。这就是为什么array_keys比array_unique函数更快的原因。

PHP将二维数组某一个字段相同的数组合并起来的方法 本文实例讲述了PHP将二维数组某一个字段相同的数组合并起来的方法。分享给大家供大家参考,具体如下:例子:array(3){[0]=array(){["id"]=string(2)""["uid"]

PHP实现根据时间戳获取周几的方法 本文实例讲述了PHP实现根据时间戳获取周几的方法。分享给大家供大家参考,具体如下:获取某个时间戳的周几,以及未来几天以后的周几其中:$time代

PHP计算当前坐标3公里内4个角落的最大最小经纬度实例 本文实例讲述了PHP计算当前坐标3公里内4个角落的最大最小经纬度的方法。分享给大家供大家参考,具体如下://$lng、$lat经纬度$half=;$distance=3;//3公里

标签: array php

本文链接地址:https://www.jiuchutong.com/biancheng/290344.html 转载请保留说明!

上一篇:Json_encode防止汉字转义成unicode的方法(jsonobject忽略字段)

下一篇:PHP将二维数组某一个字段相同的数组合并起来的方法(php对二维数组进行排序)

  • 停车费手撕票如何填写申报表
  • 进口货物账务如何处理
  • 继续教育容易过吗
  • 小规模企业能否抵扣
  • 残保金计算包括五险一金吗
  • 代订机票被骗可以追回吗
  • 收到投资款怎么做会计凭证
  • 房屋租赁收入如何征税?
  • 外商投资企业是民营企业吗
  • 如何确定企业
  • 股息红利纳税地点
  • 销售成本结转中的库存商品的单价错了怎么改u8
  • 银行现金解款单回单怎么填
  • 开发商乱要回迁怎么投诉
  • 企业所得说季报是季报填还是年底填?
  • 外商投资企业要交房产税吗
  • 原始凭证谁负责
  • 购销合同怎么签订
  • 几年前的美元现在值钱吗
  • 总公司汇总申报怎么弄
  • 付现所得税体现在哪方面
  • 没有认缴到位的股票
  • 学校食堂承包餐饮公司
  • 仓库存在不足
  • ping命令出现unreachable
  • cookie 区别
  • 如何开启系统自带杀毒软件
  • 财政补助收入的账务处理
  • 资产与负债的计税基础
  • 进程mmc.exe
  • PHP:__halt_compiler()的用法_misc函数
  • 行政事业性收费目录
  • php判断useragent
  • 高新技术企业取消资格怎么处罚
  • php处理异常
  • 软考软件设计师考试时间
  • 学生誓词最新2022年
  • 收到事业单位分红怎么办
  • mongodb aggregate 性能
  • phpcms采集教程
  • phpcms 标签
  • 售后回租的实际利率
  • 小规模出售固定资产账务处理
  • 增值税税率调整为13%从什么时候开始实行
  • 捐赠支出税前扣除标准
  • 公司账户的钱如何转出
  • 公司为员工异地缴纳五险一金
  • 旅游业小规模纳税人增值税申报
  • 什么差旅费
  • 借款利息如何记账
  • 本年负数去年正数如何算同比
  • 工会经费支出范围
  • 资产利润表
  • 贴现收到票据时会计分录
  • 出纳和记账会计哪个好
  • 公司的应付票据
  • mysql中having什么意思
  • linux下安装mysql简单的方法
  • MSSQL转MYSQL,gb2312转utf-8无乱码解决方法
  • mac安装mysql没看见初期密码
  • win7系统如何重新分区
  • 64位Vista、Windows7系统IIS连接数据库故障完美解决
  • Windows Server 2008使用软件授权管理工具
  • freebsd软件包存储库
  • win7命令提示符怎么打开
  • centos安装完为什么没有桌面
  • glimp使用方法
  • cocos2dx4.0教程
  • Node.js中的全局对象有
  • U3DPlayer UnityWebPlayer动态改变src
  • js 右键
  • jquery怎么打开
  • unity3d中用四元数 Quaternion来对一个坐标点进行旋转的初步体会
  • 深入理解新发展理念心得体会3篇
  • javascript面向对象编程指南
  • python如何搭建环境
  • 中国纳税大户排行
  • 电子税务局怎么缴纳社保费
  • 债的抵偿顺序
  • 新车交购置税的流程图
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设