$a = array(1,2,3); foreach($a as &$v){ $v *= $v; } foreach($a as $v){ var_dump($a); echo $v; } //?>
第一个foreach
$v = &$a[0];
$v = &$a[1];
$v = &$a[2];
但是由于是值传递 $v最终指向的是$a[2]的地址
149
array (size=3) 0 => int 1 1 => int 4 2 => &int 9
array (size=3) 0 => int 1 1 => int 4 2 => &int 1
1
array (size=3) 0 => int 1 1 => int 4 2 => &int 4
4
array (size=3) 0 => int 1 1 => int 4 2 => &int 4
4
从上面可以发现 第二次foreach之后, a[0]赋值给$v 也就是说a[0]的值覆盖了a[2],然后a[1]赋值给$v,也就是说a[1]覆盖了a[2],最后a[2]自己覆盖自己也就是4