2

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

4 回答 4

3

当您使用 for each 循环时,您不会更新原始数组。您只是$item在循环范围内更新 var

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

foreach ($actions as &$item) {
}

请注意,&$item将导致您的更改更新原始数组。

于 2013-05-09T07:44:37.253 回答
0

尝试这个

    foreach($actions as $key => $val){
    if($val['action'] == 'Action1'){
        $actions[$key]['value'] = 20;
    }
}
于 2013-05-09T07:45:19.307 回答
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;
    }
}

或者

foreach($actions as $key => $item){    
    if($item['action'] == 'Action1'){
        $actions[$key]['value'] = 20; // directly access $action and modify the value
    }
}
于 2013-05-09T07:45:25.197 回答
0

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

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

我记得像这样的方法

foreach($actions as &$item)

在某些情况下可能会导致一些接线问题。我在 Drupal 中遇到过一次,但不记得在哪里。

于 2013-05-09T07:48:49.360 回答