位置: 编程技术 - 正文

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开启pdo
  • php对象是什么类型的数据
  • 企业出售使用过的固定资产的增值税处理
  • 房产前期开发
  • 设计公司的设计提成方案
  • web前端框架是什么
  • 如何更改telnet端口
  • 成品油发票如何下载库存
  • 一般纳税人企业所得税如何计算
  • 建筑劳务公司适应什么工程
  • 免税进项抵扣要做账吗
  • python字符串isdigit
  • 采购的技术服务费会计分录
  • 小规模纳税人通行费可以抵扣吗
  • 绩效工资交个人所得税吗
  • 销售返利如何得到法律的保护
  • 服务费发票的税率
  • 开普通发票税率一般是多少?
  • 个人独资企业要交哪些税
  • 给客户送礼计入成本吗
  • 弥补亏损账务处理流程
  • 宾馆收入怎么做账
  • 应付账款期初期末
  • 材料采购发票未到
  • 主营业务毛利率和毛利率
  • 营业收入净额怎么算出来
  • sql server高级编程
  • 数据表的联接
  • macbookpro如何扫描
  • repair.exe是什么软件
  • win7怎么禁止系统自动更新
  • linux命令i
  • 进程acore已停止一直出现怎么办
  • ubuntu下添加新用户
  • ubuntu20怎么连接蓝牙鼠标
  • windows中常用的菜单有哪三个
  • win10系统如何清洗打印机喷头
  • centos8 redhat
  • win10的qq
  • windows mobile
  • 怎么才能把win7变win10
  • windows 8 1
  • 微信小程序商品列表代码
  • jquery验证码
  • nodejs实战教程
  • node:js
  • dom教程
  • mysql如何将查询结果输出到文件
  • Unity3D事件函数的执行顺序
  • eclipse显示错误提示
  • flask框架图
  • jquery获取元素的父元素
  • js跨域的几种方法
  • jquery中点击事件点击没动静
  • 所得税季度预缴,年度汇算清缴
  • 税务稽查人员工作总结
  • 购置税缴费方式
  • 新疆皮山县概况
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设