php foreach、while性能比较


Posted in PHP onOctober 15, 2009

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))。这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几
百几千几万次数组循环操作,差异就会明显放大。
PHP 相关文章推荐
PHP.MVC的模板标签系统(四)
Sep 05 PHP
PHP一些有意思的小区别
Dec 06 PHP
解析Extjs与php数据交互(增删查改)
Jun 25 PHP
PHP源码分析之变量的存储过程分解
Jul 03 PHP
优化WordPress中文章与评论的时间显示
Jan 12 PHP
php常用字符函数实例小结
Dec 29 PHP
Laravel中七个非常有用但很少人知道的Carbon方法
Sep 21 PHP
Thinkphp5行为使用方法汇总
Dec 21 PHP
PHP 的Opcache加速的使用方法
Dec 29 PHP
PHP asXML()函数讲解
Feb 03 PHP
PHP实现的杨辉三角求解算法分析
Mar 11 PHP
php curl操作API接口类完整示例
May 21 PHP
php侧拉菜单 漂亮,可以向右或者向左展开,支持FF,IE
Oct 15 #PHP
php 数学运算验证码实现代码
Oct 11 #PHP
用mysql触发器自动更新memcache的实现代码
Oct 11 #PHP
基于OpenCV的PHP图像人脸识别技术
Oct 11 #PHP
PHP 身份验证方面的函数
Oct 11 #PHP
使用zend studio for eclipse不能激活代码提示功能的解决办法
Oct 11 #PHP
关于页面优化和伪静态
Oct 11 #PHP
You might like
什么是短波收听SWL
2021/03/01 无线电
PHP把小数转成整数3种方法
2014/06/30 PHP
php通过文件流方式复制文件的方法
2015/03/13 PHP
PHP时间戳格式全部汇总 (获取时间、时间戳)
2016/06/13 PHP
Laravel 5.5基于内置的Auth模块实现前后台登陆详解
2017/12/21 PHP
jqeury eval将字符串转换json的方法
2011/01/20 Javascript
Javascript和Java获取各种form表单信息的简单实例
2014/02/14 Javascript
js实现图片在未加载完成前显示加载中字样
2014/09/03 Javascript
一个JavaScript递归实现反转数组字符串的实例
2014/10/14 Javascript
Angularjs中UI Router的使用方法
2016/05/14 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
微信小程序实现登录页云层漂浮的动画效果
2017/05/05 Javascript
详解Vue的computed(计算属性)使用实例之TodoList
2017/08/07 Javascript
Vue.js实现分页查询功能
2020/11/15 Javascript
Bootstrap Table列宽拖动的方法
2018/08/15 Javascript
解决cordova+vue 项目打包成APK应用遇到的问题
2019/05/10 Javascript
vue中实现Monaco Editor自定义提示功能
2019/07/05 Javascript
layer.msg()去掉默认时间,实现手动关闭的方法
2019/09/12 Javascript
vue+element 实现商城主题开发的示例代码
2020/03/26 Javascript
[35:26]DOTA2上海特级锦标赛B组小组赛#2 VG VS Fnatic第三局
2016/02/26 DOTA
Python基于回溯法子集树模板解决旅行商问题(TSP)实例
2017/09/05 Python
Python3 导入上级目录中的模块实例
2019/02/16 Python
Python实现钉钉发送报警消息的方法
2019/02/20 Python
keras做CNN的训练误差loss的下降操作
2020/06/22 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
CSS3 实现的缩略图悬停效果
2020/12/09 HTML / CSS
萌新的HTML5 入门指南
2020/11/06 HTML / CSS
Staples加拿大官方网站:办公用品一站式采购
2016/09/25 全球购物
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
建筑专业自我鉴定
2013/10/22 职场文书
上学迟到的检讨书
2014/01/11 职场文书
关于爱国的标语
2014/06/24 职场文书
考试作弊被抓检讨书
2014/10/02 职场文书
酒店前台接待岗位职责
2015/04/02 职场文书
李白经典诗之一:全文无一“月”字,却句句有月
2019/07/12 职场文书
Win11应用商店打开闪退怎么解决? win11应用商店打不开的多种解决办法
2022/04/05 数码科技