如何理解这段PHP代码?

源代码:

<?php

$arr = array(1,2,3);

foreach ($arr as &$v) {
    //nothing to do
}

var_dump($arr);

foreach($arr as $v){
    //nothing to do
}

var_dump($arr);

结果:

clipboard.png

阅读 3k
4 个回答

首先在foreach上声明的变量其实是不会消失的,也就是$v在第一个foreahch下面之外是可以用的、其次因为第一遍是取地址遍历完成之后$v的地址指向的是$arr的最后一个地址($v->$arr[2])。也就是$arr[2],而第二遍循环在给$v赋值,其实一直就是在给$arr[2]赋值。
第一遍: [1,2,1] 将$arr[0]赋值给了$arr[2]
第二遍: [1,2,2] 将$arr[1]赋值给了$arr[2]
第三遍: [1,2,2] 将$arr[2]赋值给了$arr[2] (因为$arr[2] 其值是2 ,第三遍就是把自己赋值给自己)

这样你就更容易理解了

$arr = array(1,2,3);

foreach ($arr as &$v) {
    //nothing to do
}

foreach($arr as $v){
   var_dump($arr);
}

增加了&符号取的就是地址符,你看下下面代码的运行结果。

$arr = [1,2,3];
foreach ($arr as $v){
   $v = 5;
}
var_dump($arr);
foreach ($arr as &$v){
   $v = 5;
}
var_dump($arr);

看了结果你应该会理解了吧?

引用,用完最好unset掉 我是觉得

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题