PHP for循环与foreach的范围

Emi*_*man 14 php arrays foreach loops for-loop

哪些对性能和可读性更好?

foreach(range(0,10000) as $i) {} // 3.847 ms

for($i = 0; $i < 10000; ++$i) {} // 0.663 ms
Run Code Online (Sandbox Code Playgroud)

编辑:基准测试和最后一个基准测试的速度快了近6倍.

Car*_*los 13

传统for循环比foreach+ 快range.第一个只使用整数比较和增加,而最后一个必须创建一个(可能很大)数组,然后通过移动内部数组游标并检查是否到达结束来提取每个元素.

如果执行此操作,您可以看到plain forforeach+ 快两倍range:

$t0 = microtime(true);
for ($i = 0; $i < 100000; $i++) {
}
echo 'for loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;

$t0 = microtime(true);
foreach (range(0, 100000) as $i) {
}
echo 'foreach + range loop: ' . (microtime(true) - $t0) . ' s', PHP_EOL;
Run Code Online (Sandbox Code Playgroud)

for在需要迭代给定次数的情况下,最好使用传统作为习惯,但在一天结束时,在大多数情况下您将看不到大的性能改进(考虑到上面的示例迭代100k次,如果减少迭代次数,差异会更小).


Mar*_*ker 6

如果这很关键,

for($i = 0; $i < 1000; ++$i) {}
Run Code Online (Sandbox Code Playgroud)

比...更快

for($i = 0; $i < 1000; $i++) {}
Run Code Online (Sandbox Code Playgroud)

但是你不会在1000次迭代中发现太多的差异

微量优化是否真的如此重要......如果是这样,为什么你不能简单地设置一些测试运行来自己比较不同的选项

  • `for ($i=1000; $i--;) {}` 不会更快吗(尽管是相反的)? (2认同)
  • @adeneo在这种情况下,更好地使用`while( - $ i){}`,它更具可读性,也许更快. (2认同)