Heim >Backend-Entwicklung >PHP-Tutorial >Warum zeigt die referenzierte Foreach-Schleife von PHP unerwartetes Verhalten?
Das seltsame Verhalten der referenzierten Foreach-Schleife von PHP verstehen
In PHP iteriert die foreach-Schleife über Elemente in einem Array oder Objekt. Bei Verwendung einer Referenz innerhalb der Schleife (z. B. foreach ($a as &$v) { ... }) kann es jedoch zu unerwartetem Verhalten kommen.
Das Problem
Betrachten Sie das folgende PHP-Skript:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Erwartet Ausgabe:
Ein Array mit den Elementen „a“, „b“, „c“ und „d“.
Tatsächliche Ausgabe:
Array ( [0] => a [1] => b [2] => c [3] => c )
Erläuterung
Das unerwartete Verhalten entsteht, weil innerhalb der erstellte Referenzen erstellt wurden Die foreach-Schleife bleibt bestehen, nachdem die Schleife beendet ist. Insbesondere kann die Variable $v immer noch auf das letzte Element im Array $a verweisen.
Wenn die zweite foreach-Schleife ausgeführt wird, wird $v (ein Verweis auf das letzte Element in $a) der Wert neu zugewiesen jedes Elements im Array. Da $v eine Referenz auf das letzte Element in $a ist, wird das entsprechende Array-Element geändert.
Auflösung
Um dieses Verhalten zu verhindern, deaktivieren Sie immer die Referenzvariable nachdem die foreach-Schleife abgeschlossen ist:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Ausgabe:
Array ( [0] => a [1] => b [2] => c [3] => d )
Das obige ist der detaillierte Inhalt vonWarum zeigt die referenzierte Foreach-Schleife von PHP unerwartetes Verhalten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!