首頁 >後端開發 >php教程 >foreach迴圈時動態往數組裡新增數據

foreach迴圈時動態往數組裡新增數據

WBOY
WBOY原創
2016-07-29 09:04:472579瀏覽

  foreach循環時動態往數組裡添加資料,有一次做專案中,foreach的時候需要動態往數組裡添加資料(我們這裡隨便舉個例子)

foreach迴圈時動態往數組裡新增數據

結果:哎

foreach迴圈時動態往數組裡新增數據


結果:哎


foreach迴圈時動態往數組裡新增數據結果:哎

foreach迴圈時動態往數組裡新增數據

奇了怪了,這說明foreach循環時可以動態的往數組裡添加數據,為什麼$arr的數據確實被添加上了,但是沒有被foreach循環出來呢?

網上查找得知,foreach循環的其實是數組的拷貝,而不是該數組本身,如果是數組拷貝的話,肯定是改變數組之前進行的拷貝,根據運行結果得知

雖然循環中確實改變了原有的數組,但循環的是拷貝的數組(也就是老的數組),所以你無法循環到新添加的元素

好吧,暫且忍了

如果foreach的時候用引用賦值,新添加的數據就可以被循環出來了

foreach迴圈時動態往數組裡新增數據

結果:

foreach迴圈時動態往數組裡新增數據


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

foreach迴圈時動態往數組裡新增數據

結果:

foreach迴圈時動態往數組裡新增數據

既然&的時候,直接操作的是原始數組,為什麼unset($v)之後,原數組不變呢?

foreach($arr as &$v){···}的時候,相等於$v=&$arr[$k]

foreach迴圈時動態往數組裡新增數據$arr[$k]和$v同時指向$arr[$k]的記憶體位址,即便是unset($v),只是刪除了$v對記憶體空間的引用,並沒有刪除$arr[$k]對記憶體位址的引用,所以$arr[$k]依然健在,$ arr自然也沒有變化,所以應該是這樣

foreach迴圈時動態往數組裡新增數據結果:

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

🎜🎜被引用,壓根就沒有這種文法格式🎜 🎜 以上就介紹了foreach循環時動態往數組裡添加數據,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。 🎜 🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn