$arr = array(1,2,3);
foreach($arr as &$v){}
//unset($v);
foreach($arr as $v){
//print_r($arr);
}
分析: $v在foreach结束后不会自动释放
因此第一个foreach循环结束时
$arr[2] = &$v;
因此在下一个循环中,每次循环相当于在给$arr[2]赋给当前值,即
第1次循环
$arr[2] = 1;
$arr = [1,2,1];
第2次循环
$arr[2] = 2;
$arr = [1,2,2];
第三次循环
$arr[2] = 2;
$arr = [1,2,2];
解决方案
循环结束后手动释放$v
unset($v);