位置: 编程技术 - 正文

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

  • 应交税费是什么科目
  • 增值税专用发票抵扣最新规定
  • 个人所得税的账务处理
  • 递延收益所得税负债
  • 税收分类编码是唯一的吗
  • 社保未统一征收
  • 不征税收入计入应纳税所得额吗
  • 怎么确认债权
  • 财务报表没报会影响出口退税吗为什么
  • 现代服务税目包含哪些
  • 存货占营业收入的意义
  • 民办学校账务怎么做
  • 税务系统 受理
  • 企业所得税的税率
  • 税收减免备案分录怎么写
  • 核定征收企业可以申请高新技术
  • 差旅费报销会计科目
  • 利息收入红冲怎么做
  • 个人设备租赁给公司怎么提供发票
  • 进项不够怎么避税
  • 收到测试费几分钱如何做账
  • 小规模专票普票区别
  • 开票超过离线时长怎么解决
  • 成本差异的种类有哪些?
  • 未取得发票怎么做纳税调增操作
  • 电话费发票个人抬头可以税前扣除
  • 专票私人能开吗?
  • 个税7月申报7月怎么填
  • 工资薪金怎么申报9
  • php string
  • 公司准备上市到真正上市要多久
  • 提取的坏账准备怎么算
  • u盘数据全部丢失
  • php extract函数
  • 蒂内河畔圣艾蒂安小镇,法国阿尔卑斯省 (© CAVALIER Michel/hemis.fr/Alamy Stock Photo)
  • web网页设计期末作业猫眼电影首页
  • 华硕11代笔记本装win10
  • 微信手机充值怎么自定义金额
  • 增值税纳税申报表在哪里查询
  • vuerouter模块化
  • axios是干嘛的
  • php实现评论回复功能
  • 被收购方和被收购企业
  • 生产车间的辅助记录
  • php访问mysql数据库函数
  • 运输发票抵扣进项税额
  • 供应商发票多开了如何处理?
  • 什么是俗称的汇款
  • 电子承兑提示付款提前几天
  • 期末结转会计分录总结
  • 员工加班餐费算什么费用
  • 残保金缴纳额计算公式
  • 购买员工团体意外险需要缴纳个税么
  • 进项税额转出缴税放在什么科目里
  • 制造企业费用会计
  • 年报和汇算清缴的顺序
  • 营业外收入明细账图片
  • apt-get update错误
  • 看linux系统
  • win8开机启动项怎么关闭
  • macos如何新建文件
  • windows7怎么解除密码
  • unity协程yield
  • perl里怎么对数组实现一次遍历
  • opengl光照算法
  • 我决定放弃了你却对我笑了
  • 子弹追踪原理
  • bat延迟1秒
  • Python实现定时任务
  • js html css
  • 全面详细的体检
  • python多线程爬虫代码
  • 技术开发类工作有哪些
  • jquery遍历对象使用的方法
  • 高博应诺官网
  • 江苏电子税务局网站官网
  • 佛山市地方税务局与国家税务局合并没有
  • 宝马535车船税
  • 棚户区改造的回迁房能办房产证吗
  • pcie3.0*4接口
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设