位置: 编程技术 - 正文

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

  • 本期实际抵减税额合计0.00不等于
  • 支付的画图费没有发票要如何处理
  • 什么情况下一般纳税人可以简易征收
  • 固定资产一次性扣除账务处理
  • 公转私人账户怎么转
  • 认证不过的进项税调出分录
  • 弃置费用的现值p/f
  • 对公账户转账给法人用途写什么
  • 无形资产减值损失一经确认在以后期间不得转回
  • 企业出现税务问题的案例
  • 购买租赁财产是什么意思
  • 汽车减税
  • 借款利息支出全部可以税前扣除吗
  • 我国流转税主要包括
  • 合并重组案例
  • 简易计税在借方还是贷方
  • 印花税缴纳后合计怎么算
  • 去年成立的公司今年需要年检吗
  • 所有者权益变动表
  • 超过180天增票不抵扣财务还可以入账吗?
  • 酒店会计账务处理及税务申报
  • 有子公司一定要交社保吗
  • 工程项目管理人员任命书
  • 公司什么发票可以入账
  • linux中!
  • 初级会计一共考几门课程
  • 固定资产清理和固定资产减值准备的区别
  • 关闭windows安全中心拦截
  • 服务成本怎么处理
  • bp程序是什么
  • 在承租的土地上建房
  • 所得税季报填报说明
  • cookie验证和token验证的区别
  • 公司报销额度是什么意思
  • 新政府会计制度固定资产核算
  • 抄税前要做什么
  • 稳岗补贴钱给谁
  • 辞退员工福利
  • 出差费算什么科目
  • 一般纳税人怎么转为小规模纳税人
  • 帝国cms功能
  • mongodb的基本操作
  • python正态分布采样
  • 什么样的差旅费津贴可以税前扣除
  • 科技型中小微企业贷款贴息贴保项目入库
  • sqlserver数据库指定目录
  • 有限合伙企业成本费用抵扣
  • 未分配利润是否可以全部分红
  • 企业事业结余科目有哪些
  • 事业单位小规模纳税人增值税账务处理
  • 现金流量表的内部结构怎么算
  • 参展费用
  • 税局代开专票如何做账务处理?
  • 不开票销售收入怎么做账务处理
  • 个人应如何进行社会实践
  • 补交增值税税款怎么做账
  • 固定资产的后续计量
  • 预收账款是否要交说
  • 劳务派遣税率是多少2023
  • 鉴证咨询公司
  • 工程结算属于什么行业
  • 本年利润有余额么
  • 职工福利费核算哪些内容
  • 改制后企业是否可以剥离资产管理
  • xp如何给文件夹加密码
  • redhat linux6.5安装教程
  • xp系统蓝屏解决
  • windowsxp优点
  • win8.1玩游戏卡
  • linux文件批处理命令
  • windows7组织
  • windows 10一
  • 电脑安装node
  • 服务器总是自动关机
  • nodejs 扫描目录
  • shell脚本-lt
  • 使用jQuery Rotare实现微信大转盘抽奖功能
  • 上海地区附加税税率
  • 减免税的三种方式
  • 土地规划资质业务范围
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设