php foreach、while性能比较
foreach是对数组副本进行操作(通过拷贝数组),而while则通过移动数组内部指标进行操作,一般逻辑下认为,while应该比foreach快(因为foreach在开始执行的时候首先把数组复制进去,而while直接移动内部指标。),但结果刚刚相反。
在循环里进行的是数组“读”操作,则foreach比while快:
foreach ($array as $value) {
echo $value;
}
while (list($key) = each($array)) {
echo $array[$key];
}
在循环里进行的是数组“写”操作,则while比foreach快:
foreach ($array as $key => $value) {
echo $array[$key] = $value . '...';
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] . '...';
}
总结:通常认为,foreach涉及到值复制,一定会比while慢,但实际上,如果仅仅是在循环里进行数组的读操作,那么foreach是很
快的,这是因为PHP采用的复制机制是“引用计数,写时复制”,也就是说,即便在PHP里复制一个变量,最初的形式从根本上说其实
仍然是引用的形式,只有当变量的内容发生变化时,才会出现真正的复制,之所以这么做是出于节省内存消耗得目的,同时也提升了
复制的效率。这样看来,foreach的高效读操作就不难理解了。另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结
论,多数情况下,类似foreach ($array as $key => $value)形式的做数组写操作得代码都应该被替换成while (list($key) =
each($array))。这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几
百几千几万次数组循环操作,差异就会明显放大。
转载:https://www.jb51.net/article/20415.htm
转载于:https://www.cnblogs.com/jimz/p/9346664.html
php foreach、while性能比较相关推荐
- 面试官:有了 for 循环 为什么还要 forEach ?
欢迎关注方志朋的博客,回复"666"获面试宝典 来源:juejin.cn/post/7018097650687803422 本质区别 for循环和forEach的语法区别 for循 ...
- 记一次接口性能优化实践总结:优化接口性能的八个建议
前言 最近对外接口偶现504超时问题,原因是代码执行时间过长,超过nginx配置的15秒,然后真枪实弹搞了一次接口性能优化.在这里结合优化过程,总结了接口优化的八个要点,希望对大家有帮助呀~ 数据量比 ...
- java for foreach 效率_Java中LinkedList的fori和foreach效率比较
在<Java中ArrayList的fori和foreach效率比较>中对ArrayList的两种循环方式进行了比较,本次对LinkedList的两种遍历方式进行效率的比较. 1. list ...
- js for foreach 快慢_js基本搜索算法实现与170万条数据下的性能测试
前言 今天让我们来继续聊一聊js算法,通过接下来的讲解,我们可以了解到搜索算法的基本实现以及各种实现方法的性能,进而发现for循环,forEach,While的性能差异,我们还会了解到如何通过web ...
- Java 8 Iterable.forEach()与foreach循环
本文翻译自:Java 8 Iterable.forEach() vs foreach loop Which of the following is better practice in Java 8? ...
- 面试官:有了for循环 为什么还要forEach?
面试官:有了for循环 为什么还要forEach? js中那么多循环,for for-in for-of forEach,有些循环感觉上是大同小异今天我们讨论下for循环和forEach的差异.我们从 ...
- js的 for forEach
考虑到代码少简洁,我常常用forEach,在我的猜想里我觉得forEach要耗性能.今天查看了这方面的知识,以后还是多用for少用forEach(如果for能做到的话), for 循环没有任何额外的函 ...
- 有了for循环 为什么还要forEach?
js中那么多循环,for for-in for-of forEach,有些循环感觉上是大同小异今天我们讨论下for循环和forEach的差异. 我们从几个维度展开讨论: for循环和forEach的本 ...
- java script 遍历数组_JavaScript中数组中遍历的方法
前言 最近看了好几篇总结数组中遍历方法的文章,然而"纸上得来终觉浅",决定此事自己干.于是小小总结,算是自己练手了. 各种数组遍历方法 数组中常用的遍历方法有四种,分别是: for ...
- alxctools索引超出了数组界限_[译]V8中的数组类型
译者:蒋海涛 JavaScript 对象可以和任何属性有关联.对象属性的名称可以包含任何字符.有趣的是 JavaScript 引擎可以选择名称为纯数字的属性来进行优化,而这个属性其实就是数组 inde ...
最新文章
- 啥不懂也能动手搭建属于自己的博客网站
- ECSHOP 商品分类树显示商品总数的方法
- python基础学习中要懂的知识点:反射机制
- 利用 squid 反向代理提高网站性能
- oracle11g ora 12545,sqlplus本地登录报错ORA-12545
- 【原创】关于ASP.NET WebForm与ASP.NET MVC的比较
- ABP入门系列(17)——使用ABP集成的邮件系统发送邮件
- 阿里云SLB上http强制跳转到https问题处理
- 淘宝京东设计师来看,电商Banner设计策略!
- keil5中如何实时查看变量值
- SQL查询语句-返回名称的分类
- 统计计算函数练pandas
- 三星S7edge番茄花园ROM
- Python之 函数笔记
- 开源中国 Android 文件夹管理
- 10个Spring Boot 优秀学习项目
- 给旧安卓手机安卓linux系统,手机秒变服务器(Linux Deploy)
- jquery 延迟执行
- 验证tomcat安装成功
- MATLAB机器人寻找轨迹路线规划源代码
热门文章
- 用oracle的sqlload导入文件到数据库
- android自定义滤镜,让IjkPlayer支持插入自定义的GPU滤镜方法
- ubuntu下使用screen用不关闭
- SSD源码解读之ssd_pascal.py
- 剑指Offer——Python答案
- SQLServer数据库写操作报错String or binary data would be truncated问题解决
- OpenCV笔记:pyrDown()函数和pryUp()函数的使用
- AttributeError: ‘_IncompatibleKeys‘ object has no attribute ‘cuda‘
- oracle10gdmp字符集,从Export DMP文件看导出字符集(上)
- Dialog里加入下拉框Java_android 自定义dialog弹出框,带单选多选下拉