之前在网上看到很多文章说 foreach 比 for 的性能要快 1倍,这么吓人,亲测了下。绝逼是骗人的,得因地制宜,看情况。我用的php 5.6测试如下:function addOne(&$item) { $item++; }
//产生一个10000的一个数组。
$max = 500000;
$test_arr = range(0, $max);
$temp = 0;
//$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区别好大的说。不知道为毛。有空再测试一下