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よりも高速です。最初のものは整数の比較と増加のみを使用しますが、最後のものは(おそらく大きな)配列を作成し、内部配列カーソルを移動して最後に到達したかどうかを確認して各要素を抽出する必要があります。foreachrange

これを実行すると、plainが+forよりも 2 倍高速であることがわかります。foreachrange

$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ことをお勧めします。 、反復回数を減らすと、差は小さくなります)。

于 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 ミリ秒かかりました

これらは両方とも同じ配列で行われ、それぞれの実行時間は両方ともfor言語foreach構造であり、実行速度はより速いため、数千のレコードを持つ配列で使用しない限り、それ以上の違いに気付くことはありません。

于 2012-12-18T09:31:19.540 に答える
0

Foreachは、キーと値を使用する配列を反復処理するのに最適です。forループを使用すると、キーの使用を維持することがより困難になります。 http://www.c-sharpcorner.com/interviews/answer/2147/これは役立つかもしれません

于 2012-12-18T09:07:37.803 に答える
0

この特定のケースでは (range()別のスコープから渡された配列ではなく)、foreach()高速になります。 for()他のほとんどの場合に勝つでしょう。

于 2012-12-18T09:23:31.997 に答える
0

Foreachキーと値を使用する配列を反復処理するのに最適です。

たとえば、'User' という配列があるとします。

$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て、ほぼ完全に使用していることに気付くでしょう。また、配列内の要素の総数を見つけるために使用する必要がなくなります。forforeachcount($array)

于 2012-12-18T09:14:02.423 に答える