PHP for loop vs. foreach with range [closed]

2022-08-30 20:02:49

其中哪一个对性能和可读性更好?

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

for($i = 0; $i < 10000; ++$i) {} // 0.663 ms

编辑:做了一个基准测试,最后一个基准测试几乎快了6倍。


答案 1

传统循环比 + 快。第一个仅使用整数比较和递增,而最后一个必须创建一个(可能很大)数组,然后通过移动内部数组游标并检查是否到达末尾来提取每个元素。forforeachrange

如果你执行这个,你可以看到平原比+快两倍:forforeachrange

$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;

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


答案 2

如果它那么关键,

for($i = 0; $i < 1000; ++$i) {}

速度快于

for($i = 0; $i < 1000; $i++) {}

但是你不会真正注意到1000次迭代有太大的差异。

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