Referenzverhalten in der „foreach“-Schleife: Array-Änderungen verstehen
In PHP kann die Verwendung von Referenzen innerhalb einer „foreach“-Schleife zu unerwarteten Ereignissen führen Array-Änderungen. Dieses Verhalten wird im folgenden Code hervorgehoben:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
Die Ausgabe, die dieser Code erzeugt, ist unerwartet:
Array ( [0] => a [1] => b [2] => c [3] => c )
Schritt-für-Schritt-Erklärung
Um dieses Verhalten zu verstehen, ist es wichtig, die Änderungen zu verfolgen, die während jeder Iteration von „foreach“ auftreten. Schleife:
Nach Abschluss der ersten 'foreach'-Schleife (Referenziterationen) enthält $v immer noch einen Verweis auf $a[3] ('d').
Somit wurde nach der zweiten 'foreach'-Schleife (Wertiterationen) das Array $a erstellt geändert, wobei „c“ zweimal vorkommt.
Problem lösen
Um dieses unerwartete Verhalten zu vermeiden, wird empfohlen, die Referenz nach jeder Iteration zu deaktivieren:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
Dies ergibt die erwartete Ausgabe:
Array ( [0] => a [1] => b [2] => c [3] => d )
Das obige ist der detaillierte Inhalt vonWarum führt die Verwendung von Referenzen in der „foreach'-Schleife von PHP zu unerwarteten Array-Änderungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!