代碼:
$a = array('a' => array('a'));$b = array('b' => array('b'));foreach ($b as $key => &$item) { $item[] = 'd';}$a = array_merge($b, $a);$b['b'][] = 'c';print_r($a);print_r($b);
結果:
Array( [b] => Array ( [0] => b [1] => d [2] => c ) [a] => Array ( [0] => a ))Array( [b] => Array ( [0] => b [1] => d [2] => c ))
我的困惑是為什麼合并後,對$b的操作,影響到了$a。
知道的大神,請解惑一下,謝謝!
回複內容:
代碼:
$a = array('a' => array('a'));$b = array('b' => array('b'));foreach ($b as $key => &$item) { $item[] = 'd';}$a = array_merge($b, $a);$b['b'][] = 'c';print_r($a);print_r($b);
結果:
Array( [b] => Array ( [0] => b [1] => d [2] => c ) [a] => Array ( [0] => a ))Array( [b] => Array ( [0] => b [1] => d [2] => c ))
我的困惑是為什麼合并後,對$b的操作,影響到了$a。
知道的大神,請解惑一下,謝謝!
其實我感覺你把print_r改成var_dump就可以看出來了
array (size=2) 'b' => & array (size=3) 0 => string 'b' (length=1) 1 => string 'd' (length=1) 2 => string 'c' (length=1) 'a' => array (size=1) 0 => string 'a' (length=1)array (size=1) 'b' => & array (size=3) 0 => string 'b' (length=1) 1 => string 'd' (length=1) 2 => string 'c' (length=1)
變數b指向的一個參考型別,所以改了b的值,a中的b的值也隨著變
謝謝 @風吹響的號角 的回複,我又google一下 “php foreach 引用”,找到了這篇文章,更好的理解了這個問題
【PHP】 foreach迴圈中變數引用的一道面試題
我說下我的理解,當使用&符號時,變數$b 和 $item 會同時指向一個地址,此時$b變成了一個引用變數,如果在foreach後,unset掉$item,此時就會解除$b的引用。