位置: 编程技术 - 正文

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

  • 福建税务网上办税流程
  • 缴纳印花税的会计凭证
  • 什么是企业增值税和所得税
  • 移动平均加权法是什么意思
  • 暂估入库年末怎么处理
  • 房屋租赁账务处理程序
  • 礼品费如何报销
  • 公司为个人租房是否缴纳个税
  • 赠送的商品怎么缴纳增值税
  • 总分机构汇算清缴成功后还需要填表什么报表
  • 股权增值转让的财税处理
  • 财务费用利息收入借方为负数是什么意思
  • 机器设备如何计提折旧
  • 行政事业单位拨入经费
  • 未认证的进项也就是库存
  • 物业 免物业费
  • 土地使用权如何办理
  • 工作服清洗费要交个税那
  • 小规模纳税人所得税优惠政策2023
  • 设备租赁涉及税种
  • 应交税费未交增值税怎么计算
  • 税率税额是星号什么意思
  • 政府给企业的钱叫什么
  • 销售价格调整
  • 利润表的以前年度损益调整影响利润总额吗
  • 购买机器设备配件账务处理
  • 已经抵扣增值税专用发票对方要换票怎么办
  • win11 应用商店
  • 修改apache的http服务端口为8080
  • 建筑业预缴企业所得税税率
  • 商品销售税金及附加包括哪些
  • 前端的基本知识
  • php变量有哪些特殊值
  • 旅行社专票开票内容的规定
  • 应征增值税不含税销售额是什么
  • 私对公可以转账吗?会对做账不利吗
  • node.js入门教程
  • 实收资本核算有哪些要求
  • 发票开具就能做账了吗?
  • 企业所得税期初余额什么意思
  • 房屋维修基金是谁交
  • 5万元买二手车什么品牌比较好
  • 典当业销售的死当物品是什么意思
  • 保证金计算器
  • 建筑施工中的合格是指
  • 报销餐费增值税进项税计入什么科目
  • 收到发票了填写什么单据
  • 增值税是不是不用计提
  • 现金管理办法的内容包括
  • 长期股权投资权益法初始成本的确定
  • 企业法人个人贷款企业承担吧?
  • 收房租的收据怎么写
  • 购买苗木怎么做政府会计分录
  • 募集资金有哪些渠道
  • 冲红专票分录
  • 在计划管理中根据事实思考这一步的内容是
  • 所得税会计凭证包括哪些
  • 一个会计每个月平均有多少钱
  • sqlserver 类型
  • python的底层语言
  • Win10 Mobile 10549预览版怎么升级?
  • mac更改复制快捷键
  • 怎么把mac系统的文件导出
  • FreeBSD su Sorry问题解决办法
  • 苹果系统装win8
  • windows10x预览版
  • xp系统安装版合集
  • win8出现问题需要重启
  • windows8如何添加打印机
  • scrfs.exe - scrfs是什么进程 有什么用
  • 360修复win7
  • 239mbps是多少兆网速
  • AndroidAnnotations 自定义控件 ant编译 找不到类
  • 回弹健腹轮是智商税吗
  • mapper--图片热点区域高亮组件官方站点
  • 电子税务局更改密码怎么改
  • 已抵扣过进项税额的固定资产改变用途
  • 资产管理公司收购不良资产后怎么处置
  • 企业所得税每月怎么算
  • 主管局长和分管局长谈心谈话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设