2016-04-08 6 views
0

Ich habe etwas seltsam, eine Hoffnung, jemand kann erklären, was passiert ist. Ich habe es für die Wiedergabe auf dem PHP-Version auf den folgenden Fall eingekocht 5.3.10-1ubuntu3.21:PHP-Array durch Verweis persists

$lines = array("foo" => "bar"); 

foreach ($lines as &$line) { } // Trouble-causer 

$temp = $lines; 

foreach ($lines as $key => $line) { 
    $lines[$key] = "test"; 
} 
print_r($lines); 
print_r($temp); 

Das erwartete Ergebnis dieser, da ich nicht auf $temp arbeiten bin, ist

Array 
(
    [foo] => test 
) 
Array 
(
    [foo] => bar 
) 

Aber das tatsächliche Ergebnis ist

Array 
(
    [foo] => test 
) 
Array 
(
    [foo] => test 
) 

Wenn ich die Linie Trouble-causer es wie erwartet funktioniert markiert entfernen. Irgendwie bleibt die Tatsache, dass ich $lines Elemente per Referenz fuhr, in der nächsten Iteration bestehen. Ist das zu erwarten?

+0

Ihr tatsächliches Ergebnis ist irrelevent, da Sie die gleiche Taste 2 mal haben! –

Antwort

2

Die Dokumentation von foreach sagen:

Warnung Referenz eines $value und das letzte Datenfeldelement bleiben, auch nach der foreach Schleife. Es wird empfohlen, es durch unset() zu zerstören.

foreach ($lines as &$line) { } // Trouble-causer 
unset($line); 
+0

Danke! Ich habe diesen Teil vermisst. Sehr merkwürdiges Verhalten, aber zumindest jetzt bin ich mir dessen bewusst. – MaX

Verwandte Themen