PHP foreach 地址符号的问题 求解答

代码:
<?php

$data = ['a','b','c'];
foreach($data as $k=>$v){
$v = &$data[$k];
}
var_dump($data);

输入结果:
array(3) {
[0]=>
string(1) "b"
[1]=>
string(1) "c"
[2]=>
&string(1) "c"
}
麻烦大神给解答下疑惑,最后有过程。十分感谢

阅读 2.3k
2 个回答

这样看能不能理解

    // 0、循环第一步
    $k = 0;
    $v = $data[0]; // "a"
    
    $v = &$data[$k]; // "a" ,这时候是让 $v 指向 $data[0]
    
    // 1、循环第二步
    $k = 1;
    $v = $data[1]; // "b" ,这边要注意了,上面已经让 $v 指向了 $data[0],所以这个赋值语句也相当于 $data[0] = $data[1]
    // 到这边就能理解为什么 第一个元素的值变成了原来的第二个元素了
    
    $v = &$data[$k]; // "a" ,这时候是让 $v 指向 $data[1]
    
    // 2、循环第三步
    // ... 这边就不用了吧

前后打印一下,你就能理解了。

 $data = ['a','b','c'];  
 foreach($data as $k=>$v){  
+    var_dump($data);  
     $v = &$data[$k];  
+    var_dump($data);  
 }  
 var_dump($data);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题