為什麼在 Foreach 內部使用引用時元素值會在陣列中重複?
考慮以下PHP 程式碼:
$a = array('a', 'b', 'c', 'd'); foreach ($a as &$v) { } foreach ($a as $v) { } print_r($a);
令人驚訝的是,輸出顯示最後一個元素的值已經覆蓋了其他元素的值元素,導致:
Array ( [0] => a [1] => b [2] => c [3] => c )
解釋奇怪的
此行為是PHP的記錄方面,源自於在中使用引用 (&)第一個 foreach 迴圈。
在第一個循環期間,數組的每個元素都透過引用分配給 $v。當修改 $v 時,它會更改原始數組中引用的元素。因此,當在後續循環中重新分配 $v 時,它會無意中更改與引用對應的數組元素。
解
要避免此問題,請明確取消設定引用第二個 foreach循環之前的最後一個元素:
foreach ($a as &$v) { } unset($v); foreach ($a as $v) { } print_r($a);
理解逐步過程
以下是程式碼中發生的情況的分步說明:
第一個foreach 迴圈:
第二個foreach 循環:
以上是為什麼在 PHP Foreach 迴圈中使用參考會導致元素值重複?的詳細內容。更多資訊請關注PHP中文網其他相關文章!