美文网首页
PHP foreach与引用赋值问题

PHP foreach与引用赋值问题

作者: 小哥哥吖Q | 来源:发表于2018-01-19 12:25 被阅读0次

$arr = array('a', 'b', 'c');  

foreach($arr as &$v) {}  

foreach($arr as $v) {}  

var_dump($arr);  

结果为: 

array(3) { 

  [0]=> 

  string(1) "a" 

  [1]=> 

  string(1) "b" 

  [2]=> 

  &string(1) "b" 


第一个foreach用引用赋值的方式将数组的值依次赋给了$v。  

$arr = array('a', 'b', 'c');  

foreach($arr as &$v) {}  

var_dump($v);  

此时的$v的值为c,是引用赋值,$v指向了字符串c的地址空间。  

第二个foreach是以拷贝赋值的方式将数组的值依次赋值给了$v。  

由于目前$v指向了c的地址空间,那么改变$v的值即改变了c所占地址空间的值。  

$arr = array('a', 'b', 'c');  

foreach($arr as &$v) {}  

foreach($arr as $v) {  

    var_dump($arr); break;  

}  

第一次赋值将a赋值到了$v,原有c所占的地址空间的值变为了a,此时数组就是array('a', 'b', 'a')。  

以此类推第一次赋值c->a,第二次赋值即a->b,第三次赋值即b->b,  

所以最终结果为array('a', 'b', 'b')。  

  解决方案是永远不要用&

或者老老实实按照官网的指示,用unset解除引用  

引用结束后  unset($v); 就没问题了

相关文章

  • PHP foreach与引用赋值问题

    $arr=array('a','b','c');foreach($arras&$v){}foreach($arra...

  • PHP引用赋值

    有一点重要事项必须指出,那就是只有有名字的变量才可以引用赋值。 <? $foo =25; $bar=&$foo;/...

  • php在foreach中使用引用赋值&可能遇到的问题

    场景 在写项目的时候,由于初涉PHP的赋值引用操作,觉得这个功能非常强大,用时一时爽,没有深入了解过其中的原理,导...

  • php面试

    (1)引用变量 变量赋值 变量引用 (2)reverse函数重写 PHP中没有字符串与数组的length属性 (3...

  • 基础知识点

    基础知识点 单双引号 传值方式 赋值传值 : 赋值时直接赋值固定值 引用传值: 参考文章:PHP取地址符(引用符)...

  • 数组基本操作

    Array 定义空Array Array赋值 元素判断与获取 遍历Array for in 与 forEach的区...

  • PHP垃圾回收机制

    垃圾的产生 之前的文章已经介绍过PHP的引用计数机制-PHP内核探索之变量-理解引用,当变量赋值、传递时并不会直接...

  • PHP foreach中使用引用(&)

    将以下代码打印 打印出来的结果跟预期结果的不一致,这是因为在第一次的foreach中使用了引用,顺其而然的$val...

  • PHP中foreach引用的坑

    背景 已知一个map如下: 想要做的操作: 修改map中每个value的值 将map中的所有value放入一个数组...

  • PHP的foreach的持有引用

    “Assignment by reference is also supported, using the "$v...

网友评论

      本文标题:PHP foreach与引用赋值问题

      本文链接:https://www.haomeiwen.com/subject/oieooxtx.html