php foreach引用賦值

2022-05-24 14:39:13 字數 732 閱讀 3366

在寫**時發現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 中賦值語句總是建立物件的引用值,而不是複製...