位置: 编程技术 - 正文

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数组函数实现机选双色球
  • php fork
  • 微软window
  • deepin缩放
  • 递延所得税当期要交吗
  • Skype.exe - Skype是什么进程 有什么用
  • 野生动物保护区有哪些
  • 猫鼬家族风云
  • 企业所得额不能扣除
  • uniapp仿微信
  • thinkphp3.2.3
  • 会计购入材料入什么科目
  • php操作mysql数据库
  • 应收账款的账期是什么意思
  • formdata方法
  • react modal
  • 固定资产盘盈税务处理政策
  • phpcms模板制作教程
  • js调用自己
  • 织梦logo
  • 房地产企业印花税计入什么科目
  • Mysql数据库备份库命令
  • sql server 2008怎么使用sql语句
  • 报关单保费率怎么填
  • 销售费用期末余额
  • 超过认证期专用发票怎么办
  • 外币折算会计思维导图
  • 筹建期的开办费开业后如何处理
  • 应收账款确认无法收回,确认为坏账损失
  • 工商营业执照变更网上怎么操作
  • 当月销售次月开票成本怎么结转
  • 非流动性资产有
  • 二类银行卡转账能收多少钱
  • 一个真正的企业应该具备哪些特征
  • mysql 5.7.24安装
  • myeclipse自动生成get set
  • 防火墙监视模式
  • 怎么建立dhcp服务器
  • linux中添加用户和组的操作
  • linux中内存是2GB,虚拟内存应该是多少
  • linux+c
  • 实用的linux命令
  • linux强大的网络功能
  • linux启动的基本步骤
  • linux系统修复
  • JavaScript中对象方法的创建
  • 创建ie浏览器
  • python爬虫框架 path
  • node写自动化脚本
  • angular 创建项目
  • js 选择语句
  • 用js实现类的方法
  • jquery ui和jquery easy ui
  • javascript编写程序
  • 使用灭火器人要站在上风口还是下风口
  • 增值税进项发票勾选时间
  • 如何做好税务局长
  • 7.1税务新政策
  • 辽宁省医保明细查询
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设