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

php foreach中使用了传值引用&赋值可能造成的问题

作者:用户 来源:互联网 时间:2017-12-01 20:48:20

php引用问题赋值foreach使用可能AMP造成

php foreach中使用了传值引用&赋值可能造成的问题 - 摘要: 本文讲的是php foreach中使用了传值引用&赋值可能造成的问题, foreach语句在使用的时候,如果需要改变元素的值,可以将其赋予另一个数组,也可以使用传值引用: foreach($arr as $key=>&$value){   .. { 上面的语句相当于循环的传值引用:      


foreach语句在使用的时候,如果需要改变元素的值,可以将其赋予另一个数组,也可以使用传值引用:

foreach($arr as $key=>&$value){

  ..

{

上面的语句相当于循环的传值引用:

        $value=&$arr[$key]

foreach循环结束后,最后一个$value将会被保留,即$value会保持与$arr最后一个元素建立的传值引用关系.

如果接下来重启一个foreach循环,且还是用$value来赋值的话,$value被赋值的同时,由于存在传值引用,之前的数组的最后一个元素也会被改变

下面是一个在PHP手册上的例子

<?php$arr1 = array("a" => 1, "b" => 2, "c" => 3);$arr2 = array("x" => 4, "y" => 5, "z" => 6);foreach ($arr1 as $key => &$val) {}foreach ($arr2 as $key => $val) {}var_dump($arr1);var_dump($arr2);?>The output is:array(3) { ["a"]=> int(1) ["b"]=> int(2) ["c"]=> &int(6) }array(3) { ["x"]=> int(4) ["y"]=> int(5) ["z"]=> int(6) }

上面的例子中,由于$value=&$arr1['c']关系的存在,在将$arr2的每个元素赋值给$value的过程中,$arr1['c']的值都会改变,最终值为6


        解决上述问题的方法就是在完成循环之后删除$value变量:unset($value)

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