PHP foreach()里使用& 引用赋值

<?php
$data = ['a','b','c'];

foreach ($data as &$v) {

}

foreach ($data as $v) {

}

unset($v);

var_dump($data);

这段代码的结果如何推导?是什么原理?

收到一只叮咚
浏览 648回答 4
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" }

森林海

这个问题好老啊,不过上面的大神解释的很详细。我对传引用的理解就是引用和赋值的变量共用了一块地址空间
打开App,查看更多内容
随时随地看视频慕课网APP