PHP中关于for 和 foreach 遍历数组的性能对比
之前在网上看到很多文章说 foreach 比 for 的性能要快 1倍,这么吓人,亲测了下。绝逼是骗人的,得因地制宜,看情况。我用的php 5.6测试如下:
function addOne(&$item) { $item++; } //产生一个10000的一个数组。 $max = 500000; $test_arr = range(0, $max); $temp = 0; //$br = '<br>'; $br = "\n"; //我们分别用三种方法测试求这些数加上1的值的时间。 // for 的方法 $t = microtime(1); for ($i = 0; $i < $max; $i++) $temp++; echo microtime(1)-$t,": for 没有 操作数组$br"; $t = microtime(1); foreach ($test_arr as $k => &$v) $temp++; echo microtime(1)-$t,": foreach 没有 操作数组$br$br"; $t = microtime(1); for ($i = 0; $i < $max; $i++) $test_arr[$i]++; echo microtime(1)-$t,": for 直接 操作数组$br"; $t = microtime(1); foreach ($test_arr as $k => &$v) $v++; echo microtime(1)-$t,": foreach 直接 操作数组$br$br"; $t = microtime(1); for ($i = 0; $i < $max; $i++) addOne($test_arr[$i]); echo microtime(1)-$t,": for 调用函数 操作数组$br"; $t = microtime(1); foreach ($test_arr as $k => &$v) addOne($v); echo microtime(1)-$t,": foreach 调用函数 操作数组$br"; $t = microtime(1); array_walk($test_arr, 'addOne'); echo microtime(1)-$t,": array_walk $br";
网页执行结果:
0.037818908691406: for 没有 操作数组 0.04827094078064: foreach 没有 操作数组 0.046481847763062: for 直接 操作数组 0.048525810241699: foreach 直接 操作数组 0.13782787322998: for 调用函数 操作数组 0.12900590896606: foreach 调用函数 操作数组 0.0001070499420166: array_walk
命令行执行结果:
0.032783985137939: for 没有 操作数组 0.049838066101074: foreach 没有 操作数组 0.056764125823975: for 直接 操作数组 0.048169136047363: foreach 直接 操作数组 0.10591602325439: for 调用函数 操作数组 0.083390951156616: foreach 调用函数 操作数组 0.14780592918396: array_walk
看结果使用php-fpm执行结果,for明显有优势
在命令行下执行 foreach 有优势
我估计使用apache 服务器执行效果又有所不同吧。
所以 foreach 比 for快的结论是不成立的。
有人说 for 每次要判断,所以比foreach慢
其实foreach也得判断,他判断指针是不是空呀。
for和foreach 具体使用得看场景,环境。
array_walk区别好大的说。不知道为毛。有空再测试一下