1. 云栖社区>
  2. PHP教程>
  3. 正文

【php】foreach中使用引用引起的问题

作者:用户 来源:互联网 时间:2017-12-01 14:56:52

问题

【php】foreach中使用引用引起的问题 - 摘要: 本文讲的是【php】foreach中使用引用引起的问题, 废话不多说,直接看如下代码: $arr = array('a','b','c','d'); foreach($arr as &$v){} foreach($arr as $v){ var

废话不多说,直接看如下代码:

     $arr = array('a','b','c','d');     foreach($arr as &$v){}     foreach($arr as $v){          var_dump($v);     }

运行后,结果如下:

string 'a' (length=1)string 'b' (length=1)string 'c' (length=1)string 'c' (length=1)     //这里为什么是c呢。

我们会诧异,为什么最后一个是c而不是d。

其实道理很简单,在第一次循环结束以后,变量v变成了arr[3]的引用。所以,当第二次使用foreach时,使用的是传值的方式,这种方式,其实就是遍历变量arr的值,然后把值赋给变量v,由于这时候变量v是arr[3]的引用,所以把值赋给变量v,其实就是赋给arr[3]。

我们把代码改一下:

     $arr = array('a','b','c','d');     foreach($arr as &$v){}     foreach($arr as $v){          var_dump($arr);//这里把变量$arr打印出来     }

运行后,会发现:

array (size=4)  0 => string 'a' (length=1)  1 => string 'b' (length=1)  2 => string 'c' (length=1)  3 => &string 'a' (length=1)array (size=4)  0 => string 'a' (length=1)  1 => string 'b' (length=1)  2 => string 'c' (length=1)  3 => &string 'b' (length=1)array (size=4)  0 => string 'a' (length=1)  1 => string 'b' (length=1)  2 => string 'c' (length=1)  3 => &string 'c' (length=1)array (size=4)  0 => string 'a' (length=1)  1 => string 'b' (length=1)  2 => string 'c' (length=1)  3 => &string 'c' (length=1)

可以发现,arr[3]的值一直在改变。

版权声明:本文为博主原创文章,转载请注明出处。

以上是云栖社区小编为您精心准备的的内容,在云栖社区的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索问题 ,以便于您获取更多的相关知识。