位置: 编程技术 - 正文

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

  • 4s店事故处理流程
  • 我国流转税的税种有哪些
  • 什么情况才能开专票
  • 借款利息如何计算政策依据
  • 国债利息属于免税吗
  • 物流公司车子
  • 将自产产品用于在建工程要交增值税
  • 以件数为印花税计税依据的有哪些
  • 个税系统异常怎么申报
  • 有限责任公司相关规定
  • 加计抵扣进项税进营业外收入
  • 滞留票怎么做账务处理
  • 库存现金限额的概念
  • 个税申报包含哪些
  • 住宿费发票可以抵扣进项税吗
  • 车辆的鉴定评估方法
  • 原来已入帐的款现在收回帐务处理?
  • 个人出租住房如何开票
  • 预缴税多交了,税务局退吗
  • 废旧物资销售如何征税
  • 固定资产当月清账怎么算
  • 合同返点提成犯法吗
  • 纯粮食白酒广告语
  • 英雄联盟中该如何加好友
  • windows10无法连接到打印机,拒绝访问
  • 老毛桃u盘启动盘制作工具怎么安装win10系统 老毛桃u盘安装win10系统图文教程
  • 总部资产减值测试例题
  • 企业对员工罚款的法律依据
  • 个体户转企业怎么做账
  • php imagecopy
  • 银行贷款成本高
  • 瓦尔加德
  • 房地产企业项目开发法律风险
  • php扩展开发参考手册
  • 关于固定资产管理
  • mybatis isnotempty标签
  • iscsiadm命令详解
  • 如何一次性删除微信账单记录
  • phpcms建站教程
  • 工程咨询属于什么服务业
  • 城市维护建设税,教育费附加,地方教育费附加
  • sql server 2016 sp2
  • 计提消费税的会计分录讲解
  • 有限公司能变更成个体工商户吗
  • 合伙企业法人股东税收
  • 应收预收应付预付科目怎么合并
  • 增值税发票系统客服电话
  • 固定资产折旧会计凭证
  • 困难企业社保费返还
  • 计提个人所得税会计分录怎么做账
  • 单位交社保怎么取消居民医保
  • 记账凭证修改有几种方法
  • 住宿费记入成本会计分录
  • 免予缴纳增值税
  • 报关单不在海关信息中
  • 农业合作社成本有哪些
  • 全国县市区最多的省
  • 如何利用excel的数据制作图表
  • 系统装在从盘
  • xp系统怎么安装网络驱动
  • xp系统怎么取消密码怎么设置
  • WIN7系统如何禁止特定软件在线升级
  • centos 7安装桌面
  • msg是什么文件
  • win7系统连接无线鼠标
  • win10小娜怎么用不了
  • win7系统盘扩大
  • gho文件过大
  • w7开机界面
  • nodejs cicd
  • unity基础教程
  • 如何输出反序数
  • js实现滚动条
  • shell脚本技巧
  • jquery dom对象
  • java编程基础知识入门
  • unity-chan
  • asyncio 的 coroutine对象 与 Future对象使用指南
  • 重庆国家税务局发票查询
  • 经营工作会议
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设