位置: 编程技术 - 正文

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

  • 公司全额承担个税怎么申报
  • 车保保险合同
  • 非营利组织企业所得税季度申报表
  • 企业所得税要交多少税
  • 小规模纳税人注册资金最高多少
  • 公司基本户可以转私人账户吗
  • 信用评估费用收费标准
  • 行政处罚属于什么费用
  • 劳务与临时工的区别
  • 独资企业是向地税申报个税吗
  • 代销手续费怎么做账
  • 无形资产原值变动账务处理
  • 行政会计账务处理
  • 增值税三个过渡期科目
  • 建筑安装业跨省经营管理税务通知
  • 企业大中小型划分最新标准
  • 餐饮行业采购流程图
  • 发票作废时间有多长
  • 企业季度所得税可以弥补以前年度亏损吗
  • 金银制成的金银币及摆件是否征收消费税?
  • 核定征收的小规模企业优惠
  • 公司的实收资本是借款,但是利息由公司付,会计怎么做账
  • ghost 安装器
  • 允许企业所得税税前扣除的公益性捐赠的条件包括
  • 个人投资额是什么意思
  • 融资租赁业务的操作程序
  • php企业管理系统
  • PHP:imagetruecolortopalette()的用法_GD库图像处理函数
  • php fopen()
  • 车辆年审收费么
  • vue相关
  • 哪些货物可以享受减免税政策
  • 制造业工资计提
  • php linux 环境搭建
  • php单例模式什么时候用
  • v-model的双向绑定原理
  • 广告费可以结转几年扣除
  • 销售货物产生的运费怎么开票
  • mysql表中数据
  • 二手车减免增值税的规定
  • 城市道路占用费的收费标准
  • 公司从个人手中购买二手车
  • 以权益结算的股份
  • 劳务报酬收入是否含税
  • 小规模增值税免税政策变化历程
  • 融资性售后回租承租方为什么不交税
  • 企业丢失专用发票税务机关如何处理
  • 税控技术维护费普通发票可以抵扣吗
  • 开出去的发票没有进项发票怎么核算成本?
  • 财政补助资金是什么意思
  • 发票红冲怎么回事
  • 国有资产无偿划转税收政策
  • 总结sql执行进展怎么写
  • xp系统删除文件反应很慢
  • win8一键恢复出厂设置
  • window10声音自动减小
  • centos好玩的命令
  • pssvc.exe - pssvc是什么进程 有什么用
  • winxp截图快捷命令
  • 怎么删除windows7
  • 打开安全启动
  • 安装win8.1一直卡着不动
  • android 开发环境
  • python 管理内存
  • glGenTextures(GLsizei n, GLuint *textures)函数说明
  • php上传文件到指定目录
  • 修改安卓app权限教程
  • [置顶]游戏名:chivalry2
  • unity图集作用
  • js瀑布流布局
  • 一个简单的网页
  • java模拟支付功能
  • realm数据库连接
  • python快速排序最简单写法
  • 个人在税务局一个月能开多少
  • 河南网上税务局app下载
  • 管道运输是什么意思?运输的是什么
  • 江苏单位医保如何查询
  • 哪些情况要交房租
  • 增值税专用发票怎么开
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设