位置: 编程技术 - 正文

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

  • 非货币性资产交换补价大于25%的会计处理
  • 小规模纳税人出租
  • 百旺金赋的服务费必须交吗
  • 仓库打包用的物品计什么科目
  • 土地使用税在交多少
  • 盈余公积在现金流量表中哪里体现
  • 小规模季超30万,蔬菜还免增值税吗
  • 行政单位上年度费用做多了怎么调整成本
  • 业务招待费税前扣除比例
  • 企业怎么挑选计提折旧方式方法
  • 应预缴的增值税
  • 存货清查会计分录例题盘亏
  • 人力资源外包服务增值税税率
  • 物业公司销售门禁卡属于什么收入
  • 收取境外服务费收入会计分录
  • 企业核税需要什么资料
  • 企业发生的装修费可以几年摊销
  • 专用发票和普通发票费率
  • 开发票时税点开里怎么算?
  • 行邮税的税率档次
  • 申报预缴企业所得税
  • 净资产收益率公式怎么算出来的
  • 融资租赁抵押车辆逾期收车
  • 公司为职工购买社保只购买三险可以吗
  • 个人独资企业需要缴纳哪些税种
  • 跨月预缴如何做账
  • 进项发票没认证可以开红字申请单吗
  • windows10如何显示桌面图标
  • php composer自动加载
  • 企业利润对外投资会计处理
  • 税控盘每年的服务费可以抵扣吗
  • 红字发票如何开具
  • 银行开户费用怎么做账
  • 大学生web网页实训心得体会
  • 汽车客运补充车道标志
  • css 100vw、100vh出现滚动条怎么解决
  • php登录流程
  • centos7编译安装内核
  • python怎么将整数转化为字符串
  • 应付职工薪酬中社保费怎么记账
  • python dayup
  • 怎样合理的运用网络
  • vue3+ts+MicroApp实战教程
  • 抵账的多余款是什么科目
  • 瓶盖再来一次表情包
  • 怎么查企业历史
  • 预收帐款
  • 土地增值税中开发间接费用工资包括哪些人
  • MySQL错误什么意思
  • 企业非流动资产包括
  • 差旅费中火车票的进项税怎么计算
  • 营改增后租金收入交什么税
  • 公司转帐支票可以转账吗
  • 保险公司 返点
  • 财务报表现金流量表怎么填
  • 购买的活动板房可以退吗
  • 安置用房视同销售,怎么确认扣除费用?
  • 缴纳社保记账凭证怎么开
  • 会务费入哪个科目
  • 零余额账户年终余额清零的规定
  • 所得税费用如何计提
  • 担任会计职务的英语
  • 这张图告诉我们什么道理
  • 360rps.exe
  • win10自定义你的设备有什么用
  • win7安全更新kb4534314
  • 麒麟linux系统怎么安装软件
  • Visual Studio 2013 Tools for Unity安装目录,Visual Studio 2013 Tools.unitypackage
  • Ext JS 4实现带week(星期)的日期选择控件(实战二)
  • js实现拖拽元素改编顺序
  • Node.js中的construct构造函数
  • service segment
  • vue中使用jsx
  • unity火球特效
  • jquery修改href
  • 内蒙古税务局发票认证
  • 保税工厂和非保税工厂的区别
  • 郑州房子契税退税
  • 记账凭证编制的依据可以用
  • 房地产企业所得税确认收入时间
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设