无法更改php列表中的值

时间:2010-08-02 13:54:36

标签: php arrays list

我有以下php循环,它接受一个包含一组数组的数组。我使用此代码将每个数组转换为列表,因此我可以更好地操作元素。

这是我的代码......

while ($i<sizeof($my_array)){
    while(list($key,$val) = each($my_array[$i])){
      $j = $i+1;
        if ($key == "fruit"){
          $val = "ananas".$j;
          echo $val;
        }
     } 
 $i++;
 }

当我打印“搜索”数组(print_r($my_array))时,值不会更改。我不明白为什么这不像我预期的那样有效。有没有一个解决方案来修改$val而不改变循环结构和逻辑?

3 个答案:

答案 0 :(得分:3)

使用foreach参考:

$i = 0;
foreach ( $my_array as $key => &$val ) {
    ++$i;
    if ($key == "fruit"){
        $val = "ananas" . $i;
        echo $val;
    }
}

答案 1 :(得分:1)

$ val是$ my_array [$ i]中包含的数据的副本,而不是实际数据。要更改数组中的数据:

while ($i<sizeof($my_array)){ 
    while(list($key,$val) = each($my_array[$i])){ 
      $j = $i+1; 
        if ($key == "fruit"){ 
          $my_array[$i][$key] = "ananas"; 
          echo $my_array[$i][$key]; 
        } 
     }  
 $i++; 
 } 

使用foreach循环可能更容易

答案 2 :(得分:0)

each()不会将数据作为引用传递,而不会修改那么多的循环:

    if ($key == "fruit"){
      $val = "ananas";
      echo $val;
      $my_array[$i][$key] = $val;
    }

当然,有更好的方法可以做到这一点。但是你想要一个没有改变循环结构的答案。