绝地无双
好像以前见过类似的问题...
<?php
/* 第一次遍历 */
$v = &$data[0];
$v = &$data[1];
$v = &$data[2];
// 第一次遍历完成后, 这个时候 $v = &$data[2]
/* 第二轮遍历 */
// 因为$v等价于$data[2],相当于$data[2] = $data[0],把$data[2]赋值为a(即$data[0]); 此时数组array = ['a','b','a'];
$v = $data[0];
// 因为$v等价于$data[2],相当于$data[2] = $data[1],把$data[2]赋值为b(即$data[1]); 此时数组array = ['a','b','b'];
$v = $data[1];
// 因为$v等价于$data[2],相当于$data[2] = $data[2],即赋值为其本身,而此时已经被上一次赋值为b; 此时数组array = ['a','b','b'];
$v = $data[2];
// 第二次遍历完后, array = ['a','b','b']
unset($v); // unset($v)释放掉临时的引用
var_dump($data);
最后输出:
array(3) {
[0]=>
string(1) "a"
[1]=>
string(1) "b"
[2]=>
string(1) "b"
}