位置: 编程技术 - 正文

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

  • 股权转让主要交什么税
  • 一般纳税人进项销项抵扣如何做账
  • 农业生产成本二级科目有福利费支出吗
  • 城镇土地使用税纳税义务发生时间
  • 如何查询公司的财务负责人
  • 计提残疾人保障金会计分录
  • 电梯生产设备
  • 行政单位在建工程会计分录
  • 购置税发票如何下载
  • 房贷抵税如何申请流程
  • 返利回收期怎么计算
  • 拆迁补偿款上交财政
  • 所税税汇算补交上一年度税金如何做账务处理?
  • 发票冲红后原发票还有用吗?
  • 总账中余额为负怎么写
  • 借款合同印花税减免优惠政策
  • 企业增值税留抵退税新闻稿范文
  • 非居民企业间接转让股权案例
  • 增值税普通发票和普通发票的区别怎么交税
  • 存货周转天数计算公式是360还是365
  • 货物和劳务
  • 原材料增值税怎么算
  • 已抵扣进项税额转出滞纳金
  • 不可抵扣的进项税额如何做账
  • 合伙企业分红是免税企业需要缴纳什么税
  • 公司向个人转账分录
  • 不合规发票有哪些风险
  • 原材料报废怎么记账
  • 在win7系统中如何让电脑恢复出厂设置方法
  • 买点肥料
  • 进项和销项相抵还需要交税吗
  • 房地产公司土地在资产负债表列入
  • js编写一个标准的单例模式类
  • 备用金会涨额度吗
  • flex布局适用于哪些场景
  • 注销公司财务报表范本
  • pytorch1.5
  • vue请求后端接口
  • sql1000*1.0
  • php中自定义函数的语法格式
  • 小规模纳税人研发费用加计扣除优惠政策
  • 车间领用材料应编制什么凭证
  • 发票认证系统叫什么名字
  • 公司内控制度由谁制定
  • 建筑业成本核算流程
  • 哪些发票可以抵扣?
  • 申请专利的费用主要包括
  • 视同销售的会计分录有哪些?
  • 企业合并发生的法律服务费影响利润总额吗
  • 企业所得税不能税前扣除项目
  • 超市出租摊位交什么税
  • 公司账户的钱如何转出
  • 分公司开票总公司付款可以吗
  • 消防设施 房产税
  • 在分公司签的合同能转到总公司吗?
  • SQLServer中SELECT语句的执行顺序
  • mysql 5.7.18 winx64 免安装 配置方法
  • redhat安装yum
  • xp系统开机到window界面一直重启
  • 怎么删除swapfile
  • CentOS 6.2(32位/64位) 安装步骤图文详解
  • ubuntu开机密码不记得了
  • Win7系统如何打开磁盘管理工具
  • linux查看所有硬件信息命令
  • 车钥匙失灵了10秒教你快速解决
  • cocos做游戏
  • 从头开始绘制一幅画图片
  • jquery插件库怎么导入
  • 使用权资产
  • 解决的英文
  • android:Background线程池和UiThread线程池
  • 浅谈一下新冠的好处
  • android清理软件评测
  • Android Listview addHeaderView setadapter的时候莫名NullPointerException 解决
  • python打包成deb
  • 自然人电子税务局网页端
  • 国家税务总局广州市税务局
  • 收到发票需要代签吗
  • 山西房产税征收标准
  • 二套房办房产证税费怎么算的
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设