更新数组中的项目

时间:2013-05-09 07:42:16

标签: php arrays

我需要更新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。

4 个答案:

答案 0 :(得分:3)

当你为每个循环使用a时,你没有更新原始数组。您只是更新循环范围中的$item var

您需要通过引用传递而不是值

foreach ($actions as &$item) {
}

请注意&之前的$item,这会导致您的更改更新原始数组。

答案 1 :(得分:0)

试试这个

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

答案 2 :(得分: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
    }
}

答案 3 :(得分:0)

除了上面的答案,你也可以试试这个:

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

我记得像

这样的方法
foreach($actions as &$item)
在某些情况下,

可能会导致一些有线问题。我在Drupal遇到过一次,但不记得在哪里。