2016-04-08 12 views
0

私は何か不思議に遭遇しました。私は$tempに取り組んでいないよ以来、参考までにPHP配列が残っています

$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); 

本の予想結果を

Array 
(
    [foo] => test 
) 
Array 
(
    [foo] => bar 
) 
です:私はPHPバージョン5.3.10-1ubuntu3.21に再生するために以下のような場合にそれを煮詰めてきました

しかし、私はラインが期待どおりに動作しますTrouble-causerをマーク削除した場合、実際の結果は

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

です。どういうわけか、私が$linesのアイテムを循環させたという事実は、次の反復にとどまります。これは期待されていますか?

+0

あなたは同じキー2回を持っているため、実際の結果は何の意味もありません! –

答えて

2

foreachのドキュメントは言う:$value

警告参考と最後の配列要素でも foreachループの後に残ります。それはunset()によってそれを破壊することが推奨されます。

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

ありがとう!私はそのビットを見逃した。非常に奇妙な行動、しかし、少なくとも今私はそれを認識しています。 – MaX

関連する問題