在PHP中更新多维数组

Tal*_*lon 9 php arrays

我有一个看起来像这样的数组

$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
        )
    }
Run Code Online (Sandbox Code Playgroud)

我想更新数组以将"Promising Widget"更改为800而不是300.

请注意,此数组的顺序是任意的,这意味着我需要根据"Product"名称值更新Value Based(而不是数组中的数字).

我试图通过数组中的数字访问它,但意识到这不会起作用,我不知道如何根据另一个更改多维数组的一个元素的值.

谢谢你的帮助.

Roc*_*mat 21

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

因此,您遍历数组,找到所需的值,然后更改它.的&$value是这样的阵列通过引用传递.这意味着我们可以直接从循环中编辑数组中的值,而不必这样做$array[$key]['Value'].

  • 你应该在最后加上`unset($value);`,见[foreach, the manual](http://php.net/manual/en/control-structures.foreach)中的第一个大红色**警告** .php) (2认同)

Nic*_*ick 7

我认为你必须循环使用它们,例如:

foreach ($array as $k => $v) {
  if ($v['Product']=='Promising Widget') {
    $array[$k]['Value']=800;
  }
}
Run Code Online (Sandbox Code Playgroud)


jma*_*eli 5

我认为最通用的方法是像这样使用array_walk_recursive函数:

array_walk_recursive($array, 'updateValue');

function updateValue(&$data, $key) {
  if($key == 'Promising Widget') {
    $data = 800;
  }
}
Run Code Online (Sandbox Code Playgroud)

这样,即使稍后要在此函数上更改数组,仍然可以正常工作。