位置: 编程技术 - 正文

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

  • 农机企业所得税税率
  • 一般纳税人做账流程图
  • 申领的发票多久过期
  • 员工离职社保未及时减员怎么处理
  • 饭店开业多久生意才好
  • 行政事业单位计提折旧起始日
  • 员工工资占公司收入比例怎么算
  • 企业购买土地如何做账
  • 怎么用一证通报税
  • 购进库存商品到销售全部分录
  • 红字发票冲红需要收回原发票吗
  • 汇算清缴上年度金额怎么填
  • 没有以前年度损益调整这个科目,怎么增加?
  • 资产负债表专项储备放哪个科目?
  • 社保多交了一份怎么办
  • 服装厂里面
  • 印花税工会经费会计分录
  • 购进货物用于免征增值税项目
  • 小规模纳税人要做账吗
  • 吊车租赁费可以开现代服务吗
  • 进项发票不够如何避税
  • 专用发票的税票号码看哪里?
  • 非公司私营企业属于什么类型
  • 产品定价的含义
  • 土地所有权和使用权的法律规定
  • 模板摊销率
  • 合伙创业如何分配财产
  • 对公账户长期不用怎么收费
  • 借主营业务成本表示什么
  • 付佣金代扣个人所得税税前列支
  • 二手车买卖如何纳税
  • 预提费用冲销需要重新计提吗
  • 上年多计提所得税怎么做会计分录
  • 如何卸载win10
  • AriaNg Native 1.2.4 Aria2图形界面下载工具 中文免费版 32/64位
  • 营改增后土地增值税
  • yolov5m
  • c语言 cmd
  • 怎么安装vue环境
  • 融资租赁利息资本化条件
  • 营改增抵减的销项税发票要抵扣吗
  • chatplus
  • 采购的原材料无保质期
  • 房屋租赁的发票能抵扣吗
  • sqldbmon
  • 厂房出租没有开发票属于违法吗?
  • 新公司核税需要什么材料
  • 税盘进项税额怎么做
  • 周转材料计入现金流量表
  • 查定征收在哪一章
  • 零余额账户银行日记账
  • 固定资产的原价减去预计净残值后的余额
  • 服务性的行业有哪些
  • 账实不符怎么调账
  • Linux环境mysql5.7.12安装教程
  • sqlserver 通用分页存储过程
  • windows8.
  • centos7安装MySQL5.6
  • 64位VMware虚拟机系统打不开怎么办?
  • 如何使用光盘做启动盘
  • nero recode
  • text date excel
  • 迁移的项目
  • 修改安卓app权限教程
  • nginx1.16安装
  • shell脚本调用php方法
  • unity如何得到输入框的输入
  • Node.js中的什么模块是用于处理文件和目录的
  • jquery滚动条滚动到指定位置
  • node爬取数据
  • jqueryfor循环
  • python语言例子
  • 12366纳税服务热线存在的问题
  • 本市可以跨县高考报名吗
  • 税控发票开票系统对电脑配置有要求吗?
  • 存款利息需要交税吗
  • 云南增值税查验平台
  • 江苏电子票据
  • 越南进口废塑料新政策
  • 国外寄回来的奶粉被海关查到剪开,快递公司怎么处理
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设