Heim  >  Artikel  >  Backend-Entwicklung  >  Verwendung von foreach() in PHP und Leistungsvergleich mit while

Verwendung von foreach() in PHP und Leistungsvergleich mit while

伊谢尔伦
伊谢尔伦Original
2017-06-23 11:42:401115Durchsuche

PHP 4 führte das foreach-Konstrukt ein, ähnlich wie Perl und andere Sprachen. Dies ist lediglich eine bequeme Möglichkeit, über ein Array zu iterieren. foreach kann nur auf Arrays verwendet werden und es wird ein Fehler generiert, wenn versucht wird, es auf andere Datentypen oder eine nicht initialisierte Variable . Es gibt zwei Syntaxen, wobei die zweite eine weniger wichtige, aber nützliche Erweiterung der ersten ist.

foreach (array_expression as $value)
    statement
foreach (array_expression as $key => $value)
    statement

Das erste Format iteriert über das angegebene array_expression-Array. In jeder Schleife wird $value der Wert der aktuellen Einheit zugewiesen und der Zeiger innerhalb des Arrays bewegt sich einen Schritt vorwärts (sodass die nächste Einheit in der nächsten Schleife erhalten wird). Das zweite Format macht dasselbe, außer dass der Schlüsselname der aktuellen Zelle in jeder Schleife auch der Variablen $key zugewiesen wird.

Seit PHP 5 ist es auch möglich,
Objekte zu iterieren. Hinweis:
Wenn foreach mit der Ausführung beginnt, zeigt der Zeiger im Array automatisch auf die erste Einheit. Dies bedeutet, dass vor der foreach-Schleife kein Aufruf von reset() erforderlich ist.
Hinweis:
Sofern das Array nicht durch
referenziert wird, bearbeitet foreach eine Kopie des angegebenen Arrays, nicht das Array selbst. foreach hat einige Nebenwirkungen auf Array-Zeiger. Verlassen Sie sich während oder nach einer foreach-Schleife nicht auf den Wert eines Array-Zeigers, es sei denn, dieser wird zurückgesetzt. Seit PHP 5 ist es einfach, die Elemente eines Arrays zu ändern, indem man $value ein & voranstellt. Diese Methode weist einen Wert per Referenz zu, anstatt ihn zu kopieren.

<?php
$arr = array(1, 2, 3, 4);
foreach ($arr as &$value) {
    $value = $value * 2;
}
// $arr is now array(2, 4, 6, 8)
?>
Diese Methode ist nur verfügbar, wenn auf das zu durchlaufende Array verwiesen werden kann (z. B. wenn es sich um eine Variable handelt).

<?php
foreach (array(1, 2, 3, 4) as &$value) {
    $value = $value * 2;
}
?>
foreach bearbeitet eine Kopie des Arrays (durch Kopieren des Arrays), während while durch Verschieben des internen Index des Arrays arbeitet. Im Allgemeinen wird angenommen, dass while schneller sein sollte als foreach (. weil foreach die Ausführung startet Wenn das Array zuerst kopiert wird, wird gleichzeitig der interne Zeiger direkt verschoben), 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 . &#39;...&#39;; 
} 
while (list($key) = each($array)) { 
$array[$key] = $array[$key] . &#39;...&#39;; 
}
Zusammenfassung: Es wird allgemein angenommen, dass foreach das Kopieren von Werten beinhaltet und langsamer als while ist. Wenn Sie jedoch nur Array-Lesevorgänge in einer Schleife ausführen, ist foreach sehr effektiv

schnell. Dies liegt daran, dass der von PHP verwendete Kopiermechanismus „Referenzzählung, Copy-on-Write“ ist. Das heißt, selbst wenn eine Variable in PHP kopiert wird, hat sie tatsächlich immer noch die Form Eine Referenz. Nur wenn sich der Inhalt ändert, erfolgt ein echtes Kopieren. Der Grund dafür besteht darin, den Speicherverbrauch zu senken und die Effizienz des
Kopierens zu verbessern. Unter diesem Gesichtspunkt ist der effiziente Lesevorgang von foreach nicht schwer zu verstehen. Da foreach außerdem nicht für die Verarbeitung von Array-Schreibvorgängen geeignet ist, können wir den Schluss ziehen
, dass der Code für Array-Schreibvorgänge in den meisten Fällen die Form von foreach ($array as $key => $value) hat Sollte durch while (list($key) =
each($array)) ersetzt werden. Der durch diese Techniken hervorgerufene Geschwindigkeitsunterschied ist bei kleinen Projekten möglicherweise nicht offensichtlich, aber bei großen Projekten wie Frameworks, bei denen eine einzelne Anforderung oft Hunderte, Tausende oder Zehntausende Array-Schleifenoperationen umfasst, wird der Unterschied offensichtlich sein.

Das obige ist der detaillierte Inhalt vonVerwendung von foreach() in PHP und Leistungsvergleich mit while. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn