【问题标题】:Update Array If Value Found Multidimensional Array如果找到值则更新数组多维数组
【发布时间】:2022-03-30 13:32:07
【问题描述】:

如果找到一个值,有没有办法更新多维数组的一部分?例如,我有一个数组 $foo,其中包含一个更新的 $foo 块,称为 $bar。当 some_id = 123 时,我想将 $bar 合并到 $foo 中。

不幸的是,我无法更改 some_id 并且 some_id 键对于所有数组都是相同的。不幸的是,酒吧钥匙也必须保持不变。

$foo = array(
  0 => array(
    bar => array(
      some_id => 123,
      a => 1 
    )
  ), 
  1 => array(
    bar => array(
      some_id => 234,
      a => 5
    )
  )
)

$update_bar = array(
    some_id => 123,
    a => 10
)

【问题讨论】:

  • $foo[bar] = $update_bar
  • 这将更新两个条形数组。目标是只更新 some_id = 123 的栏。
  • 拥有相同键的数组是不可能的。

标签: php multidimensional-array key-value


【解决方案1】:

最简单的方法是:

foreach ($foo as $key => $value) {
    if ($value['some_id'] == 123) {
        $foo[$key] = $updated_bar;
        break;
    }
}

如果some_id 的值真的很重要且独一无二,那么最好重建$foo,例如:

$foo = array(
   // use some_id as key
   123 => array(
     a => 1 
   ),
   234 => array(
     a => 5
   )
);

// and update without any `foreach`
$foo[123] = array(a => new_val)

【讨论】:

  • 因为它是一个多维数组,如果 $value is_array() 则需要递归调用 foreach 函数。那么$key可以通过引用更新吗?
  • 请提供正确的数组结构。你现在的问题不需要任何recursiveness
【解决方案2】:

解决方案 1:

您可以在foreach 循环中使用reference variable,它将分配给循环变量本身。

foreach ($multifoo as &$foo) {
    $foo['bar']['a'] = ($update_bar['some_id'] == $foo['bar']['some_id']) ? $update_bar['a'] : $foo['bar']['a'];
}
print_r($multifoo);

解决方案 2:

您可以使用array_map 函数并将更改后的变量返回给它。

$multifoo = array_map(function ($foo) use ($update_bar) {
    if ($update_bar['some_id'] == $foo['bar']['some_id']) {
        $foo['bar']['a'] = $update_bar['a'];
    }
    return $foo;
}, $multifoo);
print_r($multifoo);

演示链接:https://3v4l.org/u7uL4

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-15
    • 2013-03-15
    相关资源
    最近更新 更多