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 相关文章推荐
做一个有下拉功能的留言版
Oct 09 PHP
PHP抽象类 介绍
Jun 13 PHP
php 强制下载文件实现代码
Oct 28 PHP
destoon公司主页模板风格的添加方法
Jun 20 PHP
php接口数据加密、解密、验证签名
Mar 12 PHP
php实现字符串首字母大写和单词首字母大写的方法
Mar 14 PHP
php获取汉字拼音首字母的方法
Oct 21 PHP
详解在PHP的Yii框架中使用行为Behaviors的方法
Mar 18 PHP
PHP处理CSV表格文件的常用操作方法总结
Jul 01 PHP
PHP+Ajax实现验证码的实时验证
Jul 20 PHP
详细解读php的命名空间(二)
Feb 21 PHP
PHP 实现缩略图
Mar 09 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中register_globals参数为OFF和ON的区别(register_globals 使用详解)
2012/02/05 PHP
基于php中echo用逗号和用点号的区别详解
2018/01/23 PHP
php中file_get_contents()函数用法实例
2019/02/21 PHP
File, FileReader 和 Ajax 文件上传实例分析(php)
2011/04/27 Javascript
jQuery+css实现图片滚动效果(附源码)
2013/03/18 Javascript
Bootstrap页面布局基础知识全面解析
2016/06/13 Javascript
jquery点击切换背景色的简单实例
2016/08/25 Javascript
Angular2平滑升级到Angular4的步骤详解
2017/03/29 Javascript
详解Vue中一种简易路由传参办法
2017/09/15 Javascript
微信小程序实现倒计时调用相机自动拍照功能
2018/06/10 Javascript
vue+elementUi图片上传组件使用详解
2019/08/20 Javascript
Javascript节流函数throttle和防抖函数debounce
2020/12/03 Javascript
解决vue项目本地启动时无法携带cookie的问题
2021/02/06 Vue.js
详解python中xlrd包的安装与处理Excel表格
2016/12/16 Python
Flask-Mail用法实例分析
2018/07/21 Python
nohup后台启动Python脚本,log不刷新的解决方法
2019/01/14 Python
详解Django中异步任务之django-celery
2020/11/05 Python
Html5适配iphoneX刘海屏的简单实现
2019/04/09 HTML / CSS
Magee 1866官网:Donegal粗花呢外套和大衣专家
2019/11/01 全球购物
创意爱尔兰礼物:Creative Irish Gifts
2020/01/29 全球购物
Prototype如何实现页面局部定时刷新
2013/08/06 面试题
计算机毕业大学生推荐信
2013/12/01 职场文书
电气工程及其自动化专业求职信
2014/06/23 职场文书
小学安全汇报材料
2014/08/14 职场文书
教师节倡议书
2014/08/30 职场文书
信用卡工作证明模板
2014/09/14 职场文书
车贷收入证明范本
2014/09/14 职场文书
张家口市高新区党工委群众路线教育实践活动整改方案
2014/10/25 职场文书
2014年档案管理员工作总结
2014/12/01 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
淮阳太昊陵导游词
2015/02/10 职场文书
护士辞职信怎么写
2015/02/27 职场文书
个人培训总结
2015/03/05 职场文书
追悼词范文大全
2015/06/23 职场文书
2016抗战胜利71周年红领巾广播稿
2015/12/18 职场文书
pandas 操作 Excel操作总结
2021/03/31 Python