位置: 编程技术 - 正文

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

  • 赠与税是什么税种
  • 用于员工福利的会计分录
  • 专利年费入什么会计科目
  • 仲裁给员工的款如何进行账务处理
  • 季报利润表本期金额怎么计算
  • 开票时显示没有原票抄报信息
  • 高危行业企业安全费用提取
  • 私房装修费能在公司报销吗
  • 变更企业性质企业怎么办
  • 冲销成本结转需要什么凭证
  • 以股东投资为基础
  • 报销个人费用如何定性
  • 多转出的进项税能否转回
  • 企业所得税怎么征收几个点
  • 客户把发票弄丢了,红冲重新开了会有什么风险
  • 企业所得税弥补亏损明细表怎么填写
  • 未开票收入怎么做账
  • 个人劳务费发票个人所得税
  • 建筑施工企业的安全生产许可证由哪里颁发
  • 附赠产品销售是合法还是违法
  • 城市垃圾处置费计入会计什么科目
  • 营业外收入征企业所得税吗
  • 销售收入里面包括免税收入呢
  • 挂靠别人的施工单位资质,要交什么税?
  • 农产品增值税核定扣除办法
  • 待处理财产损益的二级科目
  • 家具属于固定资产什么类别
  • 员工可以一起辞职吗
  • 商品入库没有收到发票
  • php生成二维码
  • 销售商品尚未发出会计分录
  • ekb install
  • element-ui表格
  • 用php写个简单的编程
  • avoid什么用法
  • 表格uplook
  • pytorch_lightning.utilities.exceptions.MisconfigurationException: You requested GPUs: [1] But...
  • thinkphp框架作用
  • 事业单位委托业务费拨付时是否需要发票
  • 企业购买烟酒可以抵扣吗
  • echarts地图参数设置
  • php处理接收的xml
  • 前端开发常见的兼容性问题
  • dex源码提取
  • 建材公司成本率一般多少
  • 出口抵减内销产品应纳税额怎么结转
  • 往来款项的含义
  • 小规模纳税人能开6%增值税专用发票吗
  • 瀑布流样式
  • mysql5.5命令
  • 小型企业需要给员工买社保吗
  • 企业所得税汇算表
  • 关联表的作用
  • 物业公司收到维修基金会计分录
  • 小规模纳税人开的专票对方可以抵扣吗
  • 固定资产相同的物品可以合并嘛
  • 企业初建
  • redhat网卡配置文件
  • 怎么删除隐藏文件夹win 10
  • 如何延长mac待机时间
  • linux的free命令详解
  • linux page buffer cache深入理解
  • win7纯净版系统多大
  • win10系统无法运行海岛大亨5
  • 微信小程序异步回调函数
  • ObjectAnimator Demo
  • 开快打开
  • Linux中mysqldump命令实例详解
  • 常用的批处理命令
  • 环境配置怎么配置
  • opengl visual studio
  • shell 递归
  • jQuery on绑定的事件
  • js代码怎么使用
  • 面向对象的基础知识
  • 第五章推动经济高质量发展心得
  • 西安税务稽查局举报中心
  • 销售钢材的税率增值税税率是多少
  • 山东地税app
  • 增值税综合税率是什么意思啊造价
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设