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 has encountered an Access Violation at 7C94BD02解决方法
Aug 24 PHP
PHP取得一个类的属性和方法的实现代码
May 22 PHP
Linux下CoreSeek及PHP扩展模块的安装
Sep 23 PHP
php 保留字列表
Oct 04 PHP
php数组的概述及分类与声明代码演示
Feb 26 PHP
php实现监控varnish缓存服务器的状态
Dec 30 PHP
php中curl使用指南
Feb 05 PHP
php根据指定位置和长度获得子字符串的方法
Mar 17 PHP
分享php分页的功能模块
Jun 16 PHP
PHP中substr_count()函数获取子字符串出现次数的方法
Jan 07 PHP
PHP 数组基本操作小结(推荐)
Jun 13 PHP
PHP按一定比例压缩图片的方法
Oct 12 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
php 将字符串按大写字母分隔成字符串数组
2010/04/30 PHP
curl不使用文件存取cookie php使用curl获取cookie示例
2014/01/26 PHP
php中hashtable实现示例分享
2014/02/13 PHP
Session 失效的原因汇总及解决丢失办法
2015/09/30 PHP
高性能Javascript笔记 数据的存储与访问性能优化
2012/08/02 Javascript
window.open以post方式将内容提交到新窗口
2012/12/26 Javascript
jquery实现隐藏与显示动画效果/输入框字符动态递减/导航按钮切换
2013/07/01 Javascript
禁止空格提交表单的js代码
2013/11/17 Javascript
javascript获取四位数字或者字母的随机数
2015/01/09 Javascript
js控制文本框输入的字符类型方法汇总
2015/06/19 Javascript
javascript对象的创建和访问
2016/03/08 Javascript
JS实现鼠标框选效果完整实例
2016/06/20 Javascript
JavaScript基于原型链的继承
2016/06/22 Javascript
jquery+ajax+text文本框实现智能提示完整实例
2016/07/09 Javascript
Vue项目webpack打包部署到Tomcat刷新报404错误问题的解决方案
2018/05/15 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
JS复杂判断的更优雅写法代码详解
2018/11/07 Javascript
微信小程序实现简单文字跑马灯
2020/05/26 Javascript
一篇文章带你使用Typescript封装一个Vue组件(简单易懂)
2020/06/05 Javascript
浅谈JSON5解决了JSON的两大痛点
2020/12/14 Javascript
python动态性强类型用法实例
2015/05/09 Python
解决Python3中的中文字符编码的问题
2018/07/18 Python
Matplotlib中%matplotlib inline如何使用
2020/07/28 Python
Python自动创建Excel并获取内容
2020/09/16 Python
python 实现性别识别
2020/11/21 Python
CSS3+Sprite实现僵尸行走动画特效源码
2016/01/27 HTML / CSS
纽约著名的服装辅料来源:M&J Trimming
2017/07/26 全球购物
无畏的旅行:Intrepid Travel
2017/12/20 全球购物
Needle & Thread官网:英国仙女品牌
2018/01/13 全球购物
材料物理专业大学毕业生求职信
2013/10/15 职场文书
保护环境建议书300字
2014/05/13 职场文书
离职感谢信
2015/01/21 职场文书
2015年世界无烟日演讲稿
2015/03/18 职场文书
董事长秘书工作总结
2015/08/14 职场文书
美德少年主要事迹材料
2015/11/04 职场文书
详解PHP设计模式之依赖注入模式
2021/05/25 PHP