Heim >Backend-Entwicklung >PHP-Tutorial >Warum führt die Verwendung einer Referenz in einer PHP-Foreach-Schleife zu wiederholten Elementwerten?

Warum führt die Verwendung einer Referenz in einer PHP-Foreach-Schleife zu wiederholten Elementwerten?

DDD
DDDOriginal
2024-12-15 07:29:13538Durchsuche

Why Does Using a Reference in a PHP Foreach Loop Lead to Repeated Element Values?

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:

    • Iteration 1: $v ist eine Referenz auf $a[0] ('a')
    • Iteration 2: $v ist eine Referenz auf $a[1] ('b')
    • Iteration 3: $v ist eine Referenz auf $a[2] ('c')
    • Iteration 4: $v ist eine Referenz auf $a[3] ('d')
  • Am Ende der ersten Schleife verweist $v immer noch auf $a[3] ('d').
  • Zweite foreach-Schleife:

    • Iteration 1: $v bleibt als Referenz auf $a[3], aber sein Wert wird auf gesetzt $a[0] ('a'). Dadurch wird $a[3] in 'a' geändert.
    • Iterationen 2-4: Nachfolgende Iterationen wiederholen diesen Vorgang und überschreiben $a[3] mit den Werten von $a[1] ('b'), $a[2] ('c') und schließlich $a[3] ('c').

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!

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