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 相关文章推荐
Ajax PHP分页演示
Jan 02 PHP
dede全站URL静态化改造[070414更正]
Apr 17 PHP
PHP第一季视频教程(李炎恢+php100 不断更新)
May 29 PHP
IIS7.X配置PHP运行环境小结
Jun 09 PHP
ThinkPHP模板判断输出Defined标签用法详解
Jun 30 PHP
nginx+thinkphp下解决不支持pathinfo模式
Jul 01 PHP
Laravel 5.3 学习笔记之 错误&日志
Aug 28 PHP
使用php自动备份数据库表的实现方法
Jul 28 PHP
PHP从尾到头打印链表实例讲解
Sep 27 PHP
PHP回调函数简单用法示例
May 08 PHP
分享几种好用的PHP自定义加密函数(可逆/不可逆)
Sep 15 PHP
PHP常用字符串输出方法分析(echo,print,printf及sprintf)
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中计算字符串相似度的函数代码
2012/12/29 PHP
PHP执行Curl时报错提示CURL ERROR: Recv failure: Connection reset by peer的解决方法
2014/06/26 PHP
php导入模块文件分享
2015/03/17 PHP
php将HTML表格每行每列转为数组实现采集表格数据的方法
2015/04/03 PHP
php JWT在web端中的使用方法教程
2018/09/06 PHP
PHP的PDO事务与自动提交
2019/01/24 PHP
TP5(thinkPHP框架)实现后台清除缓存功能示例
2019/05/29 PHP
js压缩利器
2007/02/20 Javascript
thinkphp 表名 大小写 窍门
2015/02/01 Javascript
你不知道的高性能JAVASCRIPT
2016/01/18 Javascript
Javascript中神奇的this
2016/01/20 Javascript
Bootstrap路径导航与分页学习使用
2017/02/08 Javascript
jQuery查找dom的几种方法效率详解
2017/05/17 jQuery
关于vue的语法规则检测报错问题的解决
2018/05/21 Javascript
解决vue移动端适配问题
2018/12/12 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
[01:44]《为梦想出发》—联想杯DOTA2完美世界全国高校联赛
2015/09/30 DOTA
python使用Tkinter显示网络图片的方法
2015/04/24 Python
Python运算符重载用法实例
2015/05/28 Python
python解决网站的反爬虫策略总结
2016/10/26 Python
Python 通过URL打开图片实例详解
2017/06/01 Python
可视化pytorch 模型中不同BN层的running mean曲线实例
2020/06/24 Python
如何教少儿学习Python编程
2020/07/10 Python
python爬虫scrapy框架的梨视频案例解析
2021/02/20 Python
Html5 语法与规则简要概述
2014/07/29 HTML / CSS
巴西最大的体育用品商城:Netshoes巴西
2016/11/29 全球购物
联想香港官方网站及网店:Lenovo香港
2018/04/13 全球购物
2013年办公室秘书的个人自我鉴定
2013/10/24 职场文书
大学军训自我鉴定
2013/12/15 职场文书
七年级地理教学反思
2014/01/26 职场文书
初中毕业生的自我评价
2014/03/03 职场文书
出纳试用期自我鉴定
2014/04/07 职场文书
Golang之sync.Pool使用详解
2021/05/06 Golang
SpringDataJPA实体类关系映射配置方式
2021/12/06 Java/Android
图神经网络GNN算法
2022/05/11 Python