「foreach」循環中的引用行為:了解數組修改
在PHP 中,在「foreach」循環中使用引用可能會導致意外的結果數組修改。此行為在以下程式碼中突出顯示:
此程式碼產生的輸出是意外的:
逐步說明
要理解這種行為,必須追蹤「foreach」每次迭代期間發生的變化循環:
-
第一次迭代(參考迭代): $v 是對$a[0] ('a') 的引用。
-
第二次迭代(參考迭代): $v 是$a[1] 的引用('b').
-
第三次迭代(參考迭代): $v 是對$a[2] ('c') 的引用。
-
第四次迭代(參考迭代): $v 是對$a[3] 的引用('d').
完成第一個'foreach' 迴圈(引用迭代)後,$v 仍然保留對$a[3] ('d') 的引用。
-
第一次迭代(值迭代): $v (仍引用 $a[3])被指派的值$a[0]('a')。但是,由於 $v 是引用,因此它將 $a[3] 修改為 'a'。
-
第二次迭代(值迭代): $v (仍引用 $a[3] ) 被賦予 $a[1] ('b') 的值。這又將 $a[3] 修改為 'b'。
-
第三次迭代(值迭代): $v (仍引用 $a[3])被分配 $a 的值[2]('c')。這將 $a[3] 再次修改為 'c'。
-
第四次迭代(值迭代): $v (仍引用$a[3])被分配$ 的值a[3] ('c').
因此,在第二個「foreach」迴圈(值迭代)之後,陣列$a 已被修改,'c' 出現了兩次。
解決問題
為了避免這種意外行為,建議在每次迭代後取消設定引用:
這將產生預期的輸出:
以上是為什麼在 PHP 的「foreach」迴圈中使用參考會導致意外的陣列修改?的詳細內容。更多資訊請關注PHP中文網其他相關文章!