php foreach array_merge問題和困惑

來源:互聯網
上載者:User
代碼:

$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的引用。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.