2013-05-09 23 views
0

我需要更新我在PHP數組中的值。看來,只要我爲某個項目分配新值,值就不會更新。這是我的代碼:更新數組中的項目

$actions = array(
    array('action' => 'Action1', 'value' => '0'), 
    array('action' => 'Action2', 'value' => '0'), 
); 

foreach($actions as $item){ 
    if($item['action'] == 'Action1'){ 
     $item['value'] = 20; 
    } 
} 

做完這個foreach循環後,數組保持原樣。所有值都具有0值。

+1

先生,這個網站是不同於其他問答網站,當你選擇答案只是檢查它是正確的,而不是更新標題爲[已解決],並在主體 – Hilmi 2013-05-09 07:51:52

回答

3

當你爲我們的每個循環你不更新原始數組。你只是更新$item VAR在循環

您需要通過引用而不是值傳遞

foreach ($actions as &$item) { 
} 

通知之$item此之前&會導致您的更改更新原始陣列的範圍。

+0

謝謝,我也找到了答案。我忘了添加「&」。 – 2013-05-09 07:48:31

+0

@StanleySemilla如果它回答你的問題,不要忘記接受它作爲答案 – swapnesh 2013-05-09 07:52:15

0

嘗試這個

foreach($actions as $key => $val){ 
    if($val['action'] == 'Action1'){ 
     $actions[$key]['value'] = 20; 
    } 
} 
0

要修改的變量的副本,你想要的是下列之一:

foreach($actions as &$item){ //<== add "&" reference to the $item that now when ever you change it the actions will change 
    if($item['action'] == 'Action1'){ 
     $item['value'] = 20; 
    } 
} 

OR

foreach($actions as $key => $item){  
    if($item['action'] == 'Action1'){ 
     $actions[$key]['value'] = 20; // directly access $action and modify the value 
    } 
} 
0

除了上述問題的答案,你也可以試試這個:

foreach(array_keys($actions) as $key){ 
    $item = &$actions[$key]; 
    if($item['action'] == 'Action1'){ 
     $item['value'] = 20; 
    } 
} 

記得好像

foreach($actions as &$item) 

所述的方法可以導致在特定情況下一些有線的問題。我在Drupal遇到過一次,但不記得在哪裏。