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

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的形式