就让我
她不在这里,她无处追寻,可她在我心里 -- 挥之不去
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区别好大的说。不知道为毛。有空再测试一下

<< 上一篇 使用PHP引用时需注意的陷阱 -- foreach js汉字排序,拼音排序,排序 下一篇 >>
文章标签
随意 | Created At 2014 By William Clinton | 蜀ICP备14002619号-4 |