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
Freigeben: 2024-12-15 07:29:13
Original
539 Leute haben es durchsucht

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);
Nach dem Login kopieren

Ü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
)
Nach dem Login kopieren

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);
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage