$a = [ ['id' => 1], ['id' => 3], ['id' => 4]];
foreach ($a as $k => &$v) {
$v['id'] = $v['id'];
}
$b = [ ['id' => 5], ['id' => 6], ['id' => 7]];
foreach ($b as $k => $v) {
$v['id'] = $v['id'];
}
var_dump($a);
dump($a);
结果:
原因:php作用域$v在方法内的作用域导致,不使用&符号 在foreach下面可获取最后一个$v的值,指针指向最后一个$v导致下面foreach 相同位置的$v被替换。
如果说一个方法内的所有foreach 的$v 都带上& 就会正常输出,因为每个$v都从源数据的头部指向下个地址。代码如下:
$a = [ ['id' => 1], ['id' => 3], ['id' => 4]];
foreach ($a as $k => &$v) {
$v['id'] = $v['id'];
}
$b = [ ['id' => 5], ['id' => 6], ['id' => 7]];
foreach ($b as $k => &$v) {
$v['id'] = $v['id'];
}