<?php
$data = ['a','b','c'];
foreach ($data as &$v) {
}
foreach ($data as $v) {
}
unset($v);
var_dump($data);
这段代码的结果如何推导?是什么原理?
4 回答
绝地无双
TA贡献1946条经验 获得超4个赞
好像以前见过类似的问题...
<?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"
}
- 4 回答
- 0 关注
- 647 浏览
添加回答
举报
0/150
提交
取消