for と foreach ではどちらが効率的ですか?理由は何ですか?
PHP で最も効率的な for および foreach は foreach
for ループ トラバーサル メソッドです:
public function getForTime(){ $big_Array = range(0,1000000,1); /* for循环遍历数组示例 */ $start_For_Time = $this->microtime_float(); //$array_Count = count($big_Array); for ($i=0;$i<count($big_Array);$i++) { $i; } $end_For_Time = $this->microtime_float(); $for_Time = $end_For_Time - $start_For_Time; echo 'for循环遍历耗时:'.$for_Time.'<br>'; }
foreach ループ走査メソッド:
public function getForeachTime(){ $big_Array = range(0,1000000,1); /* foreach循环遍历数组示例 */ $start_Foreach_Time = $this->microtime_float(); foreach ($big_Array as $key=>$val) { $key; } $end_Foreach_Time = $this->microtime_float(); $foreach_Time = $end_Foreach_Time - $start_Foreach_Time; echo 'foreach循环遍历耗时:'.$foreach_Time; }
時間計算メソッド:
/** * 时间统计函数 */ private function microtime_float($time = null) { list($usec, $sec) = explode(' ', $time ? $time : microtime()); return ((float)$usec + (float)$sec); }
2 つのメソッドの消費時間を見てみましょう
/* * 输出结果:第一种情况:先count在for循环遍历耗时:0.028002023696899 秒 * foreach循环遍历耗时:0.003000020980835 秒 * 第二种情况:在for循环条件中做count遍历耗时:0.095005035400391 秒 * foreach循环遍历耗时:0.0040009021759033 秒 * */
から上記のテストから、次の 2 つの結論が明らかに得られます。
1. for ループのトラバーサルの効率は、foreach ループのトラバーサルの効率よりも低くなります。
2 for ループは重要です。外側と内側 条件内でカウントする場合と比較して、最初の方法の方が効率的です
効率が高い理由は何ですか? この答えを探す前に、まず原則が何なのかについて説明しましょう。
for ループ:
foreach:$i から開始するたびに、各ループは $i が count より小さいかどうかを判断する必要があり、これには多くの時間がかかります。それが継続より小さい場合はループを終了します。
foreach は IEnumerable に依存します。初回変数GetList() の a が呼び出され、GetEnumerator が返され、最初の An オブジェクトが a に割り当てられます。GetList() の var a がループの最後まで実行されるたびに、MoveNext が呼び出されます。 ) メソッドは 中に 1 回だけ実行されます。上記の分析から、明らかに PHP の foreach ループの効率が for ループの効率よりもはるかに高いと結論付けることができます。おそらく大きな理由は、for では多くの条件判断が必要になるためです。したがって、将来的には、foreach を使用できる場合はどこでも使用して、効率を 2 倍にすることができます。 しかし: これは本当にそうなのでしょうか?この例はすでに明らかであり、結論は一目瞭然であると言う人もいるでしょう。他にも可能性はありますか? 真実はそれほど単純ではないと思いますが、これが本当に事実である場合、for ループの意味は何でしょうか? foreach は for よりも何倍も効率が良いので、foreach を使用するだけで十分ではないでしょうか。個人的には、私がテストした例には一定の制限があり、2 つのループ法の効率を評価するための絶対的な基礎として使用することはできないと感じています。 ただし、PHPer にとっては、コンパイル層がどのように機能するかについては、通常の作業で foreach ループ トラバーサルを使用する方が良いでしょう。興味があれば、詳しく説明する必要はありません。それを深く研究してください。 関連知識の詳細については、
PHP 中国語 Web サイト をご覧ください。 !