$a=[1,2,3];
foreach($a as &$v){
}
foreach($a as $v){
}
echo json_encode($a);
以上代码是一个百度的面试题,其输出结果为:
[1,2,2]
为什么会是这样一个结果呢。
首先循环相当于数组当前的 键 和 值 赋值给 $k(虽然没写,但是原理不变) 和 $v,第一次循环使用了引用&$v,在第一次foreach结束时$v实际是&$a[2],紧接着在第二次循环的时候,当触发$v=$a[0]之前由于$v引用并未结束,相当于$v=&$a[2]=$a[0];,即新数组键2的值等于数组键0的值,当前循环的数组结果为[1,2,1];依次类推:$a[2]=$a[0]->$a[2]=$a[1]->$a[2]=$a[2];
end:仅记录