位置: 编程技术 - 正文

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

  • 未核销fyc
  • 生产成本怎么核实
  • 出差误餐补助是谁承担
  • 增值税减免附加税怎么申报
  • 代缴职工社保手续怎么办
  • 没有上市的公司怎么看财务报表
  • 暂估收入的必要条件
  • 劳务派遣 税务
  • 工会经费征税吗
  • 非独立核算的分公司如何报税
  • 没有进货发票怎么处罚
  • 营业外支出可以扣除吗
  • 工会经费计入应付职工薪酬
  • 福利费用计入
  • 详解价外费用的会计核算
  • 营改增对企业的影响案例
  • 个人所得税可以抵扣哪些费用
  • 哪些政府补助可以做收入
  • 小规模纳税人怎么开增值税专用发票
  • 税控系统维护费280会计分录
  • 总账会计需要做账吗
  • 合伙项目如何进行分红
  • 个人股权转让个税计算
  • 加权平均数是什么意思的权
  • 金税盘发行后什么时候可以用
  • 电脑有些进程关不掉
  • 电脑删文件需要授权
  • 准备购买材料会计分录
  • 在电脑中设置一键换机
  • 深度deepin系统安装教程
  • 为高新技术企业授牌
  • 票据贴现业务如何核算
  • 销售多余材料的收入会计分录
  • 缴纳季度企业所得税比例
  • 运输发票的抵扣税率
  • 基于什么意思
  • 销售金额较大多少算较大
  • 邓弗里斯什么水平
  • web前端基础是什么
  • php用户登录界面代码
  • laravel后端
  • php获取用户信息
  • 为什么没缴税
  • 配件盘点的方法
  • 增加固定资产原值50%以上
  • 税务师工作年限证明材料
  • 我国会计制度对会计要求
  • 其他应收款科目余额在贷方表示什么
  • 融资租赁的进项怎么做账
  • 社保缴费如何做账
  • 研发人员工资计入什么科目
  • 公司为小规模纳税人
  • 业务招待费文件
  • 扣税时账上没钱怎么办
  • 抵债资产处置账务实例
  • 车辆罚款单可作为费用报销吗
  • 对公账户分为几类
  • 关于外贸企业出口的规定
  • 支票有效期10天是自然日还是工作日
  • mysql5.5.27安装教程与配置
  • win7怎么把桌面图标显示出来
  • win7经典版怎么换回win10
  • 怎么删除文件的隐藏属性
  • win101909玩dnf怎么样
  • 微信付费使用是真的吗
  • Fatal server error: could not open 无法进图形界面的解决办法
  • win7 64位系统只有搜狗浏览器可以打开网页其他浏览器打不开的故障原因及解决方法
  • xp系统如何取消开机自动启动程序
  • windows7开机显示错误恢复进不去
  • win8.1开机进入桌面
  • Android游戏开发案例教程小小弹球
  • android从服务器获取数据
  • jquery 重写 ajax提交并判断权限后 使用load方法报错解决方法
  • jquery.validate提示错误信息位置方法
  • android view动画
  • unity3d游戏开发书籍
  • python3的urllib
  • 江苏叉车证查询网上查询
  • 青岛税务局网上办税厅app
  • 西安新公司税务注销流程
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设