foreach迴圈時動態往數組裡添加資料

來源:互聯網
上載者:User
  foreach迴圈時動態往數組裡添加資料,有一次做項目中,foreach的時候需要動態往數組裡添加資料(我們這裡隨便舉個例子)

結果:

哎?奇了怪了,這說明foreach迴圈時可以動態往數組裡添加資料,為什麼$arr的資料確實被添加上了,但是沒有被foreach迴圈出來呢?
網上尋找得知,foreach迴圈的其實是數組的拷貝,而不是該數組本身,如果是數組拷貝的話,肯定是改變數組之前進行的拷貝,根據運行結果得知
雖然迴圈中確實改變了原有的數組,但迴圈的是拷貝的數組(也就是老的數組),所以你無法迴圈到新添加的元素
好吧,暫且忍了
如果foreach的時候用引用賦值,新添加的資料就可以被迴圈出來了

結果:

而foreach($arr as &$v){···}的時候,此方法將以引用賦值而不是拷貝一個值,$v和$arr[$k]指向同一記憶體位址,此時foreach迴圈的是原數組, 數組的指標也是在原數組中移動的,所以新添加的資料可以被迴圈出來,值的變化也直接影響數組本身的值

那既然&的時候,foreach直接迴圈的是原數組,那我這樣呢?

結果:

既然&的時候,直接操作的是原數組,為什麼unset($v)之後,原數組不變呢?
foreach($arr as &$v){···}的時候,相等於$v=&$arr[$k]
$arr[$k]和$v同時指向$arr[$k]的記憶體位址,即便是unset($v),僅僅是刪除了$v對記憶體空間的引用,並沒有刪除$arr[$k]對記憶體位址的引用,所以$arr[$k]依然健在,$arr自然也就沒變化,所以應該這樣

結果:

還有一點需要注意:&$k什麼結果

結果:

意思是:鍵不能被引用,壓根就沒有這種文法格式

以上就介紹了foreach迴圈時動態往數組裡添加資料,包括了方面的內容,希望對PHP教程有興趣的朋友有所協助。

  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.