位置: 编程技术 - 正文

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

  • 小微企业城建税减半
  • 委托合同有效吗
  • 支付给个人的介绍费开什么发票
  • 单位没有给员工交社保工伤怎么算
  • 一般纳税人要做价税分离吗
  • 向非关联企业捐赠现金会计分录
  • 注册资本金应该编入政府性基金预算吗
  • 一般纳税人没有开票要交税吗
  • 自然人销售固定资产
  • 税收奖励需要纳税吗
  • 购入的汽车怎么入账
  • 积分兑换现金消费的会计分录
  • 固定资产折旧应该考虑哪些因素
  • 应收账款的借方负数表示什么
  • 法人变更后的涉税问题
  • 交易性金融资产公允价值变动计入
  • 贴现利息计算器
  • 购进货物无偿赠送其他单位
  • win10无internet怎么解决
  • 其他应付款的会计分录
  • 上市公司发行债券股价会涨吗
  • 苹果微信朋友圈怎么发文字不带图片
  • 收据和发票的区别图片
  • 新准则待摊费用
  • 公司购买购物卡发给职工的账务处理
  • PHP:xml_parser_create_ns()的用法_XML解析器函数
  • rapapp.exe - rapapp是什么进程 有何作用
  • 拍卖获得收入个税
  • 农产品核定扣除办法
  • mcappins.exe - mcappins进程是什么文件 什么意思.
  • 存货 计价
  • 单位和个人交付的区别
  • 期末库存盘点表
  • 收到证券公司异常交易
  • 残保金是职工薪酬吗
  • 小规模纳税人的企业所得税税率
  • vue前进后退
  • 退回的工伤保险会计分录
  • 老生常谈的近义词
  • 股东借款作为项目投入的依据
  • 管理费用主要包括
  • 土增尾盘销售应该如何申报收入
  • 个人向企业借贷违法吗
  • 哪个命令可以对mysql数据库做完全备份
  • 会计利润属于什么会计科目
  • 残保金如何做账务处理
  • 出口企业样品收入分录
  • 只知道主营业务怎么办
  • 物业公司代收水费合理吗
  • 合伙企业分红怎么做账
  • 企业所得税留抵税额
  • 研发成功后的产品出售如何处理
  • 进项税税额是多少
  • 月底现金余额
  • 三大财务报表英文
  • 研发支出的帐务处理
  • mysql新手入门
  • 微软星期二补丁KB3022345导致USB设备无法识别怎么办?
  • win10系统打开网页一会儿就没了
  • windows恶意软件删除工具怎么安装
  • 苹果服务器操作系统
  • 在linux操作系统中,/etc/rc.d/init.d
  • 怎么设置永久禁止下载拼多多
  • win10怎么用cmd删除文件
  • linux查看使用率命令
  • window批处理
  • ie所有版本
  • node定时任务框架
  • python里的迭代器
  • linux shell 进程
  • JavaScript中reduce()方法的使用详解
  • js 数组去重的四种方法
  • js获取文本框的值进行计算
  • 原生js
  • android 4.2
  • 新加坡政治体制的介绍
  • 非营利组织认定条件
  • 浙江省有多少家农业银行
  • 福州市税务局领导班子成员名单
  • 交强险和车船税网上购买
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设