Heim > Artikel > Backend-Entwicklung > Unterschiede und Leistungsvergleich zwischen foreach- und while-Schleifen
foreach- und while-Schleife in PHP, was ist also der Unterschied zwischen foreach- und while-Schleife? Welcher hat eine bessere Leistung? .
In einer While-Schleife liest Perl eine Eingabezeile, speichert sie in einer Variablen und führt den Hauptteil der Schleife aus. Dann geht es zurück, um andere Eingabezeilen zu finden. In der foreach-Schleife wird die gesamte EingabezeileBei der Eingabe von Dateien mit großer Kapazität belegt die Verwendung von foreach viel Speicher. Der Unterschied zwischen den beiden wird sehr offensichtlich sein. Daher besteht der beste Ansatz normalerweise darin, die Abkürzung für eine while-Schleife zu verwenden und sie jeweils eine Zeile verarbeiten zu lassen. Wenn Sie bestimmte Anweisungen oder Absätze wiederholt ausführen möchten, bietet C# vier verschiedene Optionen für Schleifenanweisungen, die Sie je nach aktuellen Aufgaben verwenden können:. für Aussage
. foreach-Anweisung
. while-Anweisung
. do-Anweisung
-Ausdrücke ) wiederholt ausgeführt werden, wenn die Bedingung wahr ist:
für (Initialisierung; Bedingung; Schleife) innere Anweisung Beachten Sie Folgendes Initialisierung, Bedingungen und Schleifen sind alle optional. Wenn Sie die Bedingung weglassen, können Sie eine Endlosschleife erstellen, die zum Verlassen eine Sprunganweisung (break oder goto) erfordert.for (;;) { break; // 由于某些原因 }Ein weiterer wichtiger Punkt ist, dass Sie allen drei Parametern der 2.foreachEine Funktion, die es in der Visual Basic-Sprache schon seit langem gibt, ist die Sammlung von Aufzählungen mithilfe der For Each-Anweisung. C# verfügt auch über einen Befehl zum Sammeln von Aufzählungen über die foreach-Anweisung: foreach (Typbezeichner im Ausdruck) Die enthaltenen Schleifenvariablen der Anweisung werden nach Typ und Bezeichner deklariert, und Ausdrücke entsprechen Sammlungen. Die Schleifenvariable stellt das Sammlungselement dar, für das die Schleife ausgeführt wird. 3.whileWenn Sie eine eingeschlossene Anweisung 0 Mal oder öfter ausführen möchten, ist die while-Anweisung genau das, was Sie wollen: while (condition) Inline Statement Die bedingte Anweisung – die ebenfalls ein boolescher Ausdruck ist – steuert die Häufigkeit, mit der die enthaltene Anweisung ausgeführt wird. Mit break- und continue-Anweisungen können Sie die Ausführung von Anweisungen in einer while-Anweisung steuern, die genauso funktioniert wie in einer for-Anweisung. 4,doDie letzte in C# verfügbare Schleifenanweisung ist die do-Anweisung. Sie ist einer while-Anweisung insofern sehr ähnlich, als die Bedingung erst nach der ersten Schleife überprüft wird.
do { 内含语句 } while (条件);Die do-Anweisung garantiert, dass die enthaltenen Anweisungen mindestens einmal ausgeführt wurden, und sie werden weiterhin ausgeführt, solange die Bedingung als wahr ausgewertet wird. Mithilfe der break-Anweisung können Sie die Ausführung zum Verlassen des do-Blocks erzwingen. Wenn Sie diese Schleife überspringen möchten, verwenden Sie die continue-Anweisung. LeistungsvergleichForeach arbeitet mit einer Kopie des Arrays (durch Kopieren des Arrays), während while durch Verschieben des internen Index des Arrays arbeitet. Im Allgemeinen wird davon ausgegangen, dass while dies tun sollte schneller sein als foreach (da foreach zuerst das Array kopiert, wenn es mit der Ausführung beginnt, während while direkt den internen Zeiger bewegt), aber das Ergebnis ist genau das Gegenteil.
Was in der Schleife ausgeführt wird, ist eine Array-"Lese"-Operation, daher ist foreach schneller als while:
foreach ($array as $value) { echo $value; } while (list($key) = each($array)) { echo $array[$key]; }Was in der Schleife ausgeführt wird, ist eine Array-"Schreib"-Operation, also ist while schneller als foreach:
foreach ($array as $key => $value) { echo $array[$key] = $value . '...'; } while (list($key) = each($array)) { $array[$key] = $array[$key] . '...'; }Lassen Sie uns zunächst die Zeit testen, die zum Durchlaufen eines
eindimensionalen Arrays mit 50.000 Indizes benötigt wird:
<?php /* * @ Author: Lilov * @ Homepage: www.111cn.net * @ E-mail: zhongjiechao@gmail.com * */ $arr = array(); for($i = 0; $i < 50000; $i++){ $arr[] = $i*rand(1000,9999); } function GetRunTime() { list($usec,$sec)=exp lode(" ",microtime()); return ((float)$usec+(float)$sec); } ###################################### $time_start = GetRunTime(); for($i = 0; $i < count($arr); $i++){ $str .= $arr[$i]; } $time_end = GetRunTime(); $time_used = $time_end - $time_start; echo 'Used time of for:'.round($time_used, 7).'(s)<br><br>'; unset($str, $time_start, $time_end, $time_used); ###################################### $time_start = GetRunTime(); while(list($key, $val) = each($arr)){ $str .= $val; } $time_end = GetRunTime(); $time_used = $time_end - $time_start; echo 'Used time of while:'.round($time_used, 7).'(s)<br><br>'; unset($str, $key, $val, $time_start, $time_end, $time_used); ###################################### $time_start = GetRunTime(); foreach($arr as $key => $val){ $str .= $val; } $time_end = GetRunTime(); $time_used = $time_end - $time_start; echo 'Used time of foreach:'.round($time_used, 7).'(s)<br><br>'; ###################################### ?>Testergebnisse: Mittelwert der drei Testergebnisse:
entspricht for, while bzw. foreach
0,1311650
0,1666853
0,1237440
Das obige ist der detaillierte Inhalt vonUnterschiede und Leistungsvergleich zwischen foreach- und while-Schleifen. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!