在寫代碼時發現php foreach引用賦值會導致意外的行為。
代碼示例:
<?php $arr = array('a','b','c'); foreach($arr as $k=>&$v) { } print_r($arr); foreach($arr as $k=>$v) { } print_r($arr); ?>輸出結果: Array ( [0] => a [1] => b [2] => c ) Array ( [0] => a [1] => b [2] => b ) 經過查找資料,找到原因。其實,第一個foreach結束後,數組$arr最後一個元素$v的引用仍然保留。在進行第二個foreach循環時,實際上是對數組$arr的第三個元素的三次賦第二個foreach開始執行時,每次數組$arr的變化如下: 第一次: Array ( [0] => a [1] => b [2] => a ) 第二次: Array ( [0] => a [1] => b [2] => b ) 第三次: Array ( [0] => a [1] => b [2] => b ) 所以會有最後的輸出結果。 為了避免這種情況,可以在第一個foreach結束後,取消掉引用:unset($v)。但是,為了避免不可預期的結果出現,慎用foreach引用賦值。