zoukankan      html  css  js  c++  java
  • 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的值为复制的副本, 而非索引!!

  • 相关阅读:
    Redis(二)
    Redis(一)
    MyBatis--一级二级缓存
    MySQL优化
    HashMap
    ArrayList
    常用框架注解说明
    Linux常用基础命令
    SpringCloud--gateway路由配置
    JetBrains系列软件的插件安装
  • 原文地址:https://www.cnblogs.com/zhilingege/p/6905487.html
Copyright © 2011-2022 走看看