PHP中foreach循环动态添加数组数据的问题解析与解决方案
数据在 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 结果是什么?
结果:
意思是:key不能被引号括起来,根本不存在这样的语法格式
上面介绍了foreach循环时动态向数组添加数据,包括相关内容。希望对PHP教程感兴趣的朋友有所帮助。