<?php$a = array(4=>array('Id'=>4, 'data'=>array('111', '222')));foreach ($a as &$value){
    foreach ($value['data'] as &$val){
        $val['Id'] = 4;
    }
    $value['name'] = 'haha';
}//var_dump($a);
foreach ($a as $value){
    var_dump($value);
}二维数组,用了两个引用。但发现最后的结果不是想要的。
大家能解释一下吗?

解决方案 »

  1.   

    to jlzan1314程序错在哪里呢?
      

  2.   

    问题点在$val['Id']=4
    很郁闷  我以为会添加元素  没想到啊没想到   居然是很怪异的赋值  php底层做了啥啊 
      

  3.   

    这个和引用没有啥关系.和数组也没关系,
    上面的代码只不过错误地对字符串用数组方式并用非数字的index赋值了而已试试这个就行了:$x='abcde';
    $x['bbb']=1;
    echo $x;这样是比较自然的方式:
    $x='abcde';
    $x[3]=1;
    echo $x;
      

  4.   

    懂了
    的确 原题就算写成$val['abcd']=4 也是一样的结果
      

  5.   

    LZ如果想将'Id'=>4添加到“data”中,应该这样做:
    <?php
    $a = array(4=>array('Id'=>4, 'data'=>array('111','222')));foreach ($a as &$value){
      $value['data']['Id'] = 4;
      $value['name'] = 'haha';
    }//var_dump($a);
    foreach ($a as $value){
      var_dump($value);
    }
    ?> 
      

  6.   


    <?php
    $a = array(4=>array('Id'=>4, 'data'=>array('111', '222')));foreach ($a as &$value){
      foreach ($value['data'] as &$val){
      $val = array('Id' => 4,'Val' => $val);
      }
      $value['name'] = 'haha';
    }
    var_dump($a);
    ?>