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(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 に答える
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 に答える