`
阿尔萨斯
  • 浏览: 4168231 次
社区版块
存档分类
最新评论

PHP中数组循环语句foreach和while的速度之辩

 
阅读更多

PHP基本上就是一种数组语言。时常要进行大量的数组循环操作,主要有两种方式,一种是foreach,另一种是while,到底哪种好哪种坏一直有争论,虽然我很早就意识到了这个问题,但是一直没有细究,懵懂的感觉一直持续到现在,为了以后能节省点CPU时间,下面总结一下:

在循环里进行的是数组“读”操作,则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采用的复制机制是“引用计数,写时复制”,这样看来,foreach的高效读操作就不难理解了。另外,既然foreach不适合处理数组写操作,那么我们可以得出一个结论,多数情况下,类似foreach ($array as $key => $value)形式的代码都应该被替换成while (list($key) = each($array))。这些技巧产生的速度差异在小项目里可能并不明显,但是在类似框架这样的大项目中,一次请求动辄便会涉及到几百几千几万次数组循环操作,差异就会明显放大。

参考链接:http://www.phpbench.com/

分享到:
评论

相关推荐

    浅谈php中的循环while、do…while、for、foreach四种循环

    我们就可以使用while循环语句来完成这个任务。 while–只要指定条件成立,则循环执行代码块。 do…while–首先执行一次代码块,然后在指定的条件成立时重复这个循环。 for–循环执行代码块制定的次数。 foreach...

    PHP 基础实例教程(PHP网页实例版)

    PHP for和foreach循环 PHP do...while循环 PHP break/continue/exit PHP 数组 PHP 数字索引数组 PHP 非数字索引数组 PHP 多维数组 PHP 数组排序 PHP 多维数组排序 PHP 随机数组排序 PHP 文件内容载入数组 PHP 数组...

    PHP遍历数组的几种方法

    三、联合使用list()、each()和while循环遍历数组。 这三种方法中效率最高的是使用foreach语句遍历数组。从PHP4开始就引入了foreach结构,是PHP中专门为遍历数组而设计的语句,推荐大家使用。先分别介绍这几种方法。...

    PHP 循环 – While 循环

    PHP 循环 – While 循环 循环执行代码块指定的次数,或者当指定的条件为真时...foreach – 根据数组中每个元素来循环代码块 while 循环 while 循环将重复执行代码块,直到指定的条件不成立。 语法 while (条件) {

    PHP5与MySQL5从入门到精通.rar

    2.7.5 foreach语句 2.7.6 declare语句 2.7.7 exit和retunl语句 2.8 包含代码 2.9 本章小结 第3章 函数 3.1 用户自定义函数 3.1.1 函数调用与函数定义 3.1.2 递归函数 3.2 函数的参数 3.2.1 按值传递参数 ...

    php的list()的一步操作给一组变量进行赋值的使用

    list,each)PHP循环遍历数组的3种方法list()、each()和while总结PHP循环语句笔记(foreach,list)深入php list()函数的详解php笔记之:php函数range() round()和list()的使用说明PHP中list()函数用法实例简析PHP

    PHP和MySQL Web开发第4版pdf以及源码

    3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 ...

    PHP和MySQL WEB开发(第4版)

    3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 反向用户...

    PHP和MySQL Web开发第4版

    3.3.3 使用循环语句 3.4 数组操作符 3.5 多维数组 3.6 数组排序 3.6.1 使用sort()函数 3.6.2 使用asort()函数和ksort()函数对相关数组排序 3.6.3 反向排序 3.7 多维数组的排序 3.7.1 用户定义排序 3.7.2 ...

Global site tag (gtag.js) - Google Analytics