2010-08-02 71 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; 
    } 

當然,有更好的方法來做到這一點。但是你想要一個不會改變循環結構的答案。