20

其中哪一个会更好地提高性能和可读性?

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

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

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

4

6 回答 6

18

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

如果你执行这个,你可以看到 plainforforeach+快两倍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;

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

于 2012-12-18T09:28:49.803 回答
6

如果这很关键,

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

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

但是您不会真正注意到仅 1000 次迭代有太大差异

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

于 2012-12-18T09:12:21.500 回答
1

比较一些php函数的执行速度

for 循环占用

for()循环using count()耗时 20.86401 毫秒

for()循环Not using count()耗时 7.09796 毫秒

使用 count() 意味着: for ($i = 1; $i < count($myarr); ++ $i) {..

其中 foreach() 循环:

foreach()花了 11.16920 毫秒

foreach()使用 KEY 耗时 12.35318 毫秒

这两者都是在同一个数组上完成的,它们各自的执行时间都显示出来了forforeach它们都是语言结构,它们的执行速度会更快,所以除非你在一个有数千条记录的数组上使用它们,否则你不会注意到更多的差异。

于 2012-12-18T09:31:19.540 回答
0

Foreach 非常适合遍历使用键和值的数组。使用 for 循环,保留键的使用更加困难。 http://www.c-sharpcorner.com/interviews/answer/2147/这可能会有所帮助

于 2012-12-18T09:07:37.803 回答
0

Foreach非常适合遍历使用键和值的数组。

例如,如果我有一个名为“用户”的数组:

$User = array(
    'name' => 'Bob',
    'email' => 'bob@example.com',
    'age' => 200
);

我可以很容易地遍历它并且仍然使用键:

foreach ($User as $key => $value) {
    echo $key.' is '.$value.'<br />';
}

这将打印出:

name is Bob
email is bob@example.com
age is 200

使用for循环,保留键的使用更加困难。

当您在 PHP 中使用面向对象的实践时,您会发现foreach几乎完全使用循环,for循环仅用于数字或基于列表的事物。foreach还可以防止您不得不使用count($array)来查找数组中的元素总数。

于 2012-12-18T09:14:02.423 回答
0

在这种特殊情况下(有range()而不是从另一个范围传递的数组) -foreach()会更快。 for()在几乎任何其他情况下都会击败它。

于 2012-12-18T09:23:31.997 回答