PHP在foreach中对$value赋值无效,应该用 ‘键’ 或者 &$value的形式

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PHP在foreach中对$value赋值无效,应该用 ‘键’ 或者 &$value的形式相关的知识,希望对你有一定的参考价值。

首先我们看下这段代码:

foreach ($data as$value) {  
    $value[\'name\'] = \'Hehe\';  
}  

$data中原始的数据为:

array(1) {
  [0] => array(2) {
    ["name"] => string(4) "Haha"
    ["xxxx"] => string(4) "XXXX"
  }
}

然后我们看运行结果发现,$data中的数据完全没有改变

查阅资料我发现:

在文档 PHP: foreach - Manual 可以看到里面有这么一段话:

每次循环中,当前单元的值被 <strong>赋给</strong> $value 并且数组内部的指针向前移一步  

 

 

php在这里, 是直接复制当前单元的值,也就是说 $value 相当于是另外的一个变量,只是跟 $data 里面的变量相同,除此之外跟 $data没有任何关系。所以,我们给 $value 赋值并不能达到我们的目的。

解决办法一

通过使用  键 $key 而不是使用$value;

foreach ($data as $key => $value) {  
    $data[$key] = \'Hehe\';  
} 

解决办法二

如文档中写的,可以使用在 $value之前加上& 来修改数组的元素。此方法将以 引用 赋值 而不是拷贝一个值;

文章中还有一句话需要注意:

Warning
数组最后一个元素的 $value 引用在 foreach 循环之后仍会保留。建议使用 unset() 来将其销毁。

 

最后再总结下: 当我们使用foreach需要改原数组中的值时,切记不要借用$value, 因为$value的值为复制的副本, 而非索引!!

以上是关于PHP在foreach中对$value赋值无效,应该用 ‘键’ 或者 &$value的形式的主要内容,如果未能解决你的问题,请参考以下文章

PHP foreach

php遍历数组赋值

在 laravel 错误中为 foreach() 提供的参数无效(查看:我看不到 $value

为 foreach() 提供的参数无效

php中对2个数组相加的函数

PHP 变量赋值没有按预期工作