位置: 编程技术 - 正文

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对二维数组进行排序)

  • 小规模纳税人可以收专票吗
  • 公司购入的财务怎么做账
  • 工程施工是资产还是负债
  • 公司投资股票亏损,要交企业所得税和个人所得税吗
  • 发票的抵扣期限怎么填
  • 重新建账 和之前数据差的多
  • 企业接受外部劳务派遣用工支出税前扣除问题
  • 企业年金需要缴纳个人所得税吗
  • 异地经营需要办什么税务手续?
  • 信用等级D可以贷款吗
  • 增值税发票查询
  • 税法关于印花税的规定
  • 我们公司春节发工资英文
  • 个税申报异常怎么办
  • 快递公司怎么结算
  • 房地产公司基础设施建设费包括哪些费用
  • 购货方预付货款的分录
  • 劳务派遣公司开票几个点
  • 关于工程施工的文章
  • macbook右上角
  • 收到一张增值税红冲发票
  • 电脑开机无法启动怎么解决
  • 怎么安装win7系统后怎么安装驱动
  • 单位向员工出租房屋要交增值税吗
  • linux限制用户访问文件
  • 进价金额核算法的账务处理特点
  • typora修改背景颜色
  • 出租不动产预缴增值税计算公式
  • 甲公司购入一台入账价值为200万元的生产设备
  • WGAN(Wasserstein GAN)看这一篇就够啦,WGAN论文解读
  • web爬虫视频教程
  • PHP模拟http请求的方法详解
  • php使用ajax
  • sosreport命令收集详细信息
  • ip a命令详解
  • 印花税土地使用权计税依据
  • 当月勾选认证可以在下月抵扣吗
  • p f和p a的区别
  • 增值税季度缴纳时间
  • 非税收入统一票据怎么查询
  • 关联企业债资比怎么计算
  • 无形资产入账价值错误怎么调
  • SQL server配置管理器打开TCP/IP后重启不了
  • 个人工资薪金如何零申报
  • 增值税纳税申报类型有哪些
  • SQL Server实时同步更新远程数据库遇到的问题小结
  • 收到投资款如何声明
  • 查补以前年度所得税
  • 分配股利有几种形式
  • 工会账户收到经费的会计科目
  • 呆账坏账对应五级分类
  • 单位给个人转款怎么做账
  • 税控盘会计分录怎么做
  • 小规模物业广告怎么写
  • 一年以内到期的长期借款属于
  • 完美解决索尼电视arc无声音
  • mysql处理海量数据
  • windows隐藏文件名
  • 昂达主板插线安装图解
  • win7还是win8好用
  • xp系统有什么用
  • vista和win10
  • centos7 network
  • linux文本模式无法打字
  • linux系统文件系统只读
  • 新款apple macbook air
  • ant压缩包删除
  • Unity3D游戏开发标准教程吴亚峰于复兴人民邮电出版社
  • jquery width
  • shell中特殊字符的含义
  • 远程批量管理windows
  • mongoose教程
  • js键盘事件有哪些?各自的作用如何
  • jquery detach
  • android教学
  • python中django
  • 减免所得税额怎么计算出来的
  • 江西省国家税务局李德平
  • 公寓土地增值税30%-60%阶梯税
  • 商铺转让费怎么开票项目
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设