2010-08-02 40 views
1

我有以下php循环,它需要一个包含一组数组的数组。我使用此代码将每个数组转换为列表,以便更好地操作元素。不能更改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

使用foreach参考:

$i = 0; 
foreach ($my_array as $key => &$val) { 
    ++$i; 
    if ($key == "fruit"){ 
     $val = "ananas" . $i; 
     echo $val; 
    } 
} 
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循环

0

each()没有通过数据作为参考,而无需修改环路多少:

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

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