13

私はこのような配列を持っています

$array =
    Array
    (
    [0] => Array
        (
            [Product] =>  Amazing Widget
            [Value] => 200
        )

    [1] => Array
        (
            [Product] => Super Amazing Widget
            [Value] => 400
        )

    [2] => Array
        (
            [Product] =>  Promising Widget 
            [Value] => 300
        )

    [3] => Array
        (
            [Product] => Superb Widget
            [Value] => 400
        )
    }

配列を更新して、「PromisingWidget」を300ではなく800に変更したいと思います。

この配列の順序は任意であることに注意してください。つまり、「Product」名の値に基づいて値を更新する必要があります(配列内の番号ではありません)。

配列内の数値を介してアクセスしようとしましたが、その理由で機能しないことに気付き、多次元配列のある要素の値を別の要素に基づいて変更する方法がわかりません。

助けてくれてありがとう。

4

5 に答える 5

25
foreach($array as &$value){
    if($value['Product'] === 'Promising Widget'){
        $value['Value'] = 800;
        break; // Stop the loop after we've found the item
    }
}

したがって、配列をループして、必要な値を見つけてから変更します。これ&$valueは、配列が参照によって渡されるようにするためです。つまり、何もしなくても、ループから配列内の値を直接編集できます$array[$key]['Value']

于 2012-04-16T19:00:39.457 に答える
9

次のように、それらをループする必要があると思います。

foreach ($array as $k => $v) {
  if ($v['Product']=='Promising Widget') {
    $array[$k]['Value']=800;
  }
}
于 2012-04-16T19:00:10.557 に答える
8

最も普遍的なアプローチは、次のようにarray_walk_recursive関数を使用することだと思います。

array_walk_recursive($array, 'updateValue');

function updateValue(&$data, $key) {
  if($key == 'Promising Widget') {
    $data = 800;
  }
}

このようにして、後でこの関数で配列を変更しても、問題なく動作します。

于 2014-09-01T15:09:29.187 に答える
2

この答えは遅すぎるかもしれませんが、この関数を使用して解決した同様の問題に直面しました

function r_search_and_replace( &$arr ) {
    foreach ( $arr as $idx => $_ ) {
        if( is_array( $_ ) ) r_search_and_replace( $arr[$idx] );
        else {
            if( is_string( $_ ) ) $arr[$idx] = str_replace( "PATTERN", "REPLACEMENT", $_ );
        }
    }
}
于 2014-05-07T11:24:29.067 に答える