Warum wird der Elementwert im Array wiederholt, wenn eine Referenz innerhalb von Foreach verwendet wird?
Bedenken Sie den folgenden PHP-Code:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Überraschenderweise zeigt die Ausgabe, dass der Wert des letzten Elements die Werte anderer Elemente überschrieben hat, was zur Folge hat in:
Array ( [0] => a [1] => b [2] => c [3] => c )
Erklärung der Kuriosität
Dieses Verhalten ist ein dokumentierter Aspekt von PHP, der auf die Verwendung einer Referenz (&) in der ersten foreach-Schleife zurückzuführen ist .
Während der ersten Schleife wird jedes Element des Arrays $v per Referenz zugewiesen. Wenn $v geändert wird, ändert es das referenzierte Element im ursprünglichen Array. Wenn also $v in der nachfolgenden Schleife neu zugewiesen wird, ändert es versehentlich das Array-Element, das der Referenz entspricht.
Lösung
Um dieses Problem zu vermeiden, deaktivieren Sie explizit die Verweis auf das letzte Element vor der zweiten foreach-Schleife:
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Die Schritt-für-Schritt-Anleitung verstehen Prozess
Hier ist eine Schritt-für-Schritt-Erklärung, was im Code passiert:
Erste foreach-Schleife:
Zweite foreach-Schleife:
Das obige ist der detaillierte Inhalt vonWarum führt die Verwendung einer Referenz in einer PHP-Foreach-Schleife zu wiederholten Elementwerten?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!