如果在另一个平面关联数组中找到相应的键,我想更改一个多维数组中的值。
我有这两个数组:
$full = [
'Cars' => [
'Volvo' => 0,
'Mercedes' => 0,
'BMW' => 0,
'Audi' => 0
],
'Motorcycle' => [
'Ducati' => 0,
'Honda' => 0,
'Suzuki' => 0,
'KTM' => 0
]
];
$semi = [
'Volvo' => 1,
'Audi' => 1
];
我希望数组看起来像这样:
Array
(
[Cars] => Array
(
[Volvo] => 1
[Mercedes] => 0
[BMW] => 0
[Audi] => 1
)
[Motorcycle] => Array
(
[Ducati] => 0
[Honda] => 0
[Suzuki] => 0
[KTM] => 0
)
)
我从输入字段中获取 $semi 数组,并希望将其合并到 $full 中以将其保存到我的数据库中。
我已经尝试过 array_replace() 像:
$replaced = array_replace($full, $semi);
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
你只需要访问“leafnodes”,使用
array_walk_recursive()就可以非常直接地迭代和修改整个数组。现代“箭头函数”语法允许访问半数组,而无需编写
use()。这种方法绝对不会进行迭代函数调用。它通过引用 (
&$v) 修改$v,使用“加法赋值”组合运算符 (+=) 以及空合并operator (??) 有条件地增加半数组中找到的全数组中的值。代码:(演示)
array_walk_recursive( $full, fn(&$v, $k) => $v += $semi[$k] ?? 0 ); var_export($full);不使用
array_walk_recursive()将需要使用嵌套循环来增加合格的制造商。代码:(演示)
foreach ($full as &$manufacturers) { foreach ($manufacturers as $m => &$count) { $count += $semi[$m] ?? 0; } } var_export($full);您应该循环
$semi数组并检查它是否存在于$full数组之一中,然后添加到其中:foreach ($semi as $semiItem => $semiValue) { foreach ($full as &$fullItems) { if (isset($fullItems[$semiItem])) { $fullItems[$semiItem] = $semiValue; } } }