PHP Foreach 透過引用傳遞:最後一個元素重複之謎揭開
考慮以下PHP 代碼:
$arr = ["foo", "bar", "baz"]; foreach ($arr as &$item) { /* do nothing by reference */ } print_r($arr); foreach ($arr as $item) { /* do nothing by value */ } print_r($arr);
執行時,它意外地修改了原始數組$arr,導致以下輸出:
Array ( [0] => foo [1] => bar [2] => baz ) Array ( [0] => foo [1] => bar [2] => bar )
理解行為
在初始foreach 循環之後,變數$ item 仍然是與$arr[2] 相同的記憶體位置的引用。因此,第二個 foreach 迴圈的每次迭代(以值傳遞參數)都會以新迭代的值取代引用的值(因此 $arr[2])。
詳細說明
在第一個循環中:
澄清誤解
此行為不被視為錯誤。它與 PHP 中引用的預期行為一致。如果您在循環之外使用以下語法,將會觀察到類似的結果:for ($i = 0; $i < count($arr); $i++) { $item = $arr[$i]; }
結論
在PHP 中使用引用時,請認識到這一點至關重要透過引用變數所做的修改也會影響原始值。根據期望的結果,可以有效地利用或避免這種行為。以上是為什麼在使用帶有參考傳遞的 foreach 迴圈時,PHP 陣列中的最後一個元素會重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!