$arr = [
'a',
'b',
'c',
'd'
];
foreach ($arr as &$val){}
foreach ($arr as $val)
{
print_r($arr);
}
结果:
Array
(
[0] => a
[1] => b
[2] => c
[3] => a
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => b
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => c
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => c
)
发生此现象的原因:$arr的内部指针 经历过
foreach ($arr as &$val){}
这个循环 以后 是指向 $arr[3],
相当于
$val = &$arr[3];
在第一循环的时候 做了一下几件事情:
- 把$val 这个变量定义出来了
- 把$val 指向 $arr[3]的物理地址
第二循环的时候 ,把 $arr 就会把 值 赋值给 $val ,而 $val 是指向 a r r [ 3 ] 的 物 理 地 址 , 所 以 出 现 上 面 的 情 况 。 如 果 把 第 二 个 循 环 的 时 候 把 arr[3]的物理地址,所以出现上面的情况。 如果把 第二个循环的 时候 把 arr[3]的物理地址,所以出现上面的情况。如果把第二个循环的时候把val 改为 $val1 或者其他值,就不会出现此现象,会出现下面情况
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)
Array
(
[0] => a
[1] => b
[2] => c
[3] => d
)