位置: 编程技术 - 正文

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

  • 一般纳税人每个月需要报哪些税
  • 承租方支付租房税费
  • 纳税检查调整的滞纳金怎么收
  • 航天金税财务软件使用说明
  • 季报业务活动表本月数
  • 滴滴能出票吗
  • 法律规定公司账本保存年限
  • 财产租赁合同印花税优惠政策
  • 2019年一季度季报怎样填写
  • 2019年小微企业六税两费减免
  • 计提房产税计入哪个科目
  • 新车交车辆购置税需要什么材料
  • 外币结汇怎么做账
  • 可供出售金融资产改为什么科目
  • 工会经费计入应付职工薪酬
  • 境内企业转让境外股权税收
  • 企业出售房屋交什么税
  • 一般纳税人房租没有发票怎么办
  • 想做边销茶生意?增值税可以这样处理
  • 出售不动产分录
  • 基本户转移到别的银行怎么转移
  • 进项发票认证抵扣会计分录
  • 递延所得税资产借贷方向
  • 车提折旧会计分录
  • 保户储金科目属于保险公司的什么科目
  • 退还工会经费会退回吗
  • 员工退回多发的工资,是上缴国库还是财政专户
  • 实发工资和报税工资
  • 出售使用过的车辆如何交印花税呢
  • 结转已销产品实收成本
  • php strftime
  • 职工报工伤后用人单位还有赔偿吗
  • 迭代器,生成器
  • 生物制品简易征收文件
  • 体验了才明白的作文范文
  • 蓝桥杯咋样
  • win11怎么通过ip连接打印机
  • golang和php
  • 建筑行业预交增值税税率是多少
  • 三代手续费的税率
  • 百度 编辑器
  • 汽车修理厂利润
  • 其他应付款在清算时怎么处理
  • 小规模纳税人怎么开专票
  • sql2005安装步骤
  • mysql中游标的作用
  • 劳务费发票是个人的吗
  • 工会经费计税依据是应发还是实发
  • 无偿调入资产如何做账
  • 服务不动产和无形资产本期数,第19栏
  • 营业外支出什么科目借贷方向
  • 预付账款期末可能有余额吗
  • 应交税费应交增值税进项税额在借方
  • 股权转让如何进行
  • 转账显示未认证
  • 个人购买机动车需要交增值税吗
  • 远期支票可以背书转让吗
  • 万达对赌协议是什么
  • 小规模公司用什么成本核算方法
  • 汇算清缴结束后发现有错账
  • 公司章程约定的出资时间
  • 班车租赁费计入福利费吗
  • 劳务费可以白条入账吗
  • mysql5.7.31
  • 理解 成为 超越梗
  • 局域网 下载
  • 苹果电脑如何查看WiFi密码
  • winxp任务栏消失
  • 防止电脑死机
  • macbook恢复macos
  • python kmeans sklearn
  • 深入理解typescript 豆瓣
  • jquery中如何获取元素?
  • javascript编程基础
  • jquery查找当前元素的父元素
  • python中set用法
  • 租房完税证明需要房东交钱吗?
  • 青年文明号创建目标
  • 江西省税务局官网查询系统
  • 所得税与增值税区别
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设