在寫**時發現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引用賦值。
php foreach迴圈中使用引用的問題
看 再做解釋 複製 如下 array array a b c d foreach array as knqbmgey val echo val 輸出d echo kay 輸出3 val e print r array 輸出array 0 a 1 b 2 c 3 d 在foreach迴圈中,當迴圈結束...
php foreach迴圈中使用引用的問題
看 再做解釋 複製 如下 array array a b c d foreach array as key val echo val 輸出d echo kay 輸出3 val e print r array 輸出array 0 a 1 b 2 c 3 d 在foreach迴圈中,當迴圈結束後,key...
python 賦值 引用
在 python 中賦值語句總是建立物件的引用值,而不是複製物件。因此,python 變數更像是指標,而不是資料儲存區域,參見 1.在執行以下 的過程中 t temp t t 發現每次temp t新增乙個值時,t也會相同新增乙個值,經查詢,在 python 中賦值語句總是建立物件的引用值,而不是複製...