foreach は (配列をコピーすることによって) 配列のコピーを操作しますが、 while は配列の内部インデックスを移動することによって操作します (foreach は最初に配列をコピーするため)。実行を開始するとき、 while は内部インジケーターを直接移動します)、しかし結果はまったく逆になります。
ループ内では配列の「読み取り」操作が実行されるため、foreach は while よりも高速です。
バンケジア: http://www.bkjia.com/
foreach ($array as $value) {
echo $value;
while (list($key) = each($array)) {
echo $array[$key]
}
ループ内を続行しますは配列の「書き込み」操作ですが、 while は foreach よりも高速です:
foreach ($array as $key => $value) {
echo $array[$key] = $value
}
while (list($key) = each($array)) {
$array[$key] = $array[$key] '...'
}
概要: foreach には次のことが含まれると考えられています。値のコピーは while よりも明らかに遅くなりますが、実際には、ループ内で配列を読み取るだけであれば、foreach は非常に高速です。これは、PHP で使用されるコピー メカニズムが「参照カウント、コピーオンライト」であるためです。つまり、PHP で変数がコピーされたとしても、実際には最初の形式は参照の形式のままであり、変数の内容が変更された場合にのみ実際のコピーが行われます。メモリ消費量を節約し、コピーの効率も向上します。この観点から見ると、foreach の効率的な読み取り操作を理解するのは難しくありません。さらに、foreach は配列書き込み操作の処理には適していないため、ほとんどの場合、foreach ($array as $key => $value) 形式の配列書き込み操作のコードを次のように置き換える必要があると結論付けることができます。 while (list($key) =
each($array))。これらの手法によって生じる速度の違いは、小規模なプロジェクトでは明らかではないかもしれませんが、フレームワークのような大規模なプロジェクトでは、1 つのリクエストに数百、数千、数万の配列ループ操作が含まれることが多く、その差は大幅に拡大します。
http://www.bkjia.com/PHPjc/364334.html
www.bkjia.com
true
http://www.bkjia.com/PHPjc/364334.html
技術記事
foreach は配列のコピー (配列をコピーすることによって) を操作しますが、while は配列の内部インデックスを移動することによって操作します (for...
)。