Unerwartetes Verhalten der Foreach-Schleife bei der Verwendung von Referenzen
Bei der Verwendung der foreach-Schleife von PHP mit Referenzen kann seltsames Verhalten auftreten, wie das folgende Codefragment zeigt :
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Dieser Code soll mithilfe einer Referenz das Array $a durchlaufen Variable $v in der ersten Schleife und eine Nicht-Referenzvariable $v in der zweiten Schleife. Überraschenderweise zeigt die Ausgabe jedoch, dass das letzte Element des Arrays, „d“, überschrieben wurde:
Array ( [0] => a [1] => b [2] => c [3] => c )
Erklärung des Verhaltens
Das war unerwartet Das Verhalten ist in der PHP-Dokumentation gut dokumentiert. Es warnt davor, dass bei der Verwendung von Referenzen in einer foreach-Schleife die Referenz des letzten Elements des Arrays auch nach Beendigung der Schleife bestehen bleibt. Um dieses Problem zu vermeiden, wird empfohlen, die Referenzvariable mit unset() zurückzusetzen.
In unserem Beispiel bleibt die Referenzvariable $v nach der ersten Schleife eine Referenz auf das letzte Element von $a. Wenn die zweite Schleife $a durchläuft, weist jede Iteration der Schleife den Wert $v neu zu. Da $v jedoch ein Verweis auf das letzte Element von $a ist, überschreibt es den Wert dieses Elements.
Schritt-für-Schritt-Anleitung zum Verhalten
Zur weiteren Verdeutlichung finden Sie hier eine Schritt-für-Schritt-Anleitung zu den Vorgängen in unserem Codeausschnitt:
Lösung
Zu vermeiden Um dieses Problem zu lösen, deaktivieren Sie einfach die Referenzvariable $v nach der ersten Schleife:
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { }
Das obige ist der detaillierte Inhalt vonWarum überschreibt die Foreach-Schleife von PHP mit Referenzen das letzte Array-Element?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!