2015-07-31 08:42:50 2369次浏览 2条回答 0 悬赏 11 金钱

&$value$value在这里区别是什么,修改元素为什么一定要加&符号?

$data = '[{"id":"40","num":"6"},{"id":"32","num":"3"}]';
$data = json_decode($data,true);
echo '<pre>';
var_dump($data);echo '<br>';
foreach ($data as $key => **&$value**) {//这里不加&就修改不了  	
    $value['num'] = '10';
}
			
var_dump($data);
}

最佳答案

  • naivefang 发布于 2015-07-31 08:52 举报

    &代表取引用,一般用于函数入参,代表在函数内直接引用变量的原始值。如果没有加&,在函数内对入参的修改是不会影响到外面的变量的。比如:

    function add($a) {
      $a += 1;
      echo $a;
    }
    $a = 1;
    add($a);
    echo $a;
    
    function add2(&$a) {
     $a += 1;
     echo $a;
    }
    add2($a);
    echo $a;
    
    

    foreacch语句你可以理解为一个特殊的“函数”,$key,$value可以理解为函数的入参,如果你在foreach遍历语句内需要修改原始值,必须得加&代表传引用进来。

    当然,如果是引用类型(某class的实例)这种,你不加&也可以在函数内修改原始值,比如:

    class A {
      public $b = 1;
    }
    
    function add(A $a) {
      $a->b += 1;
      echo $a->b;
    }
    
    $a = new A;
    add($a);
    echo $a->b;
    
    1 条回复
    回复于 2015-07-31 09:10 回复

    那这里的引用和Java的是不是一样的 好像不一样

    , , 觉得很赞
  • 回答于 2015-08-03 06:51 举报

    foreach ($data as $key => &$value) {//这里不加&就修改不了

    $value['num'] = '10'; 这里请楼主不要误导 , 修改方式其实可以是  $data[$key]["num"] = '10';  其实也可以
    
您需要登录后才可以回答。登录 | 立即注册
xyf90314
副总裁

xyf90314

注册时间:2015-03-04
最后登录:2023-03-13
在线时长:95小时23分
  • 粉丝21
  • 金钱5257
  • 威望40
  • 积分6607

热门问题