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什么結果

結果:

意思是:鍵不能被引用,壓根就沒有這種語法格式
如果您閱讀過此文章有所收獲,請為我頂一個,如果文章中有錯誤的地方,歡迎指出。
相互學習,共同進步!
