Ich möchte einen Wert in einem mehrdimensionalen Array ändern, wenn der entsprechende Schlüssel in einem anderen flachen assoziativen Array gefunden wird.
Ich habe diese beiden Arrays:
$full = [ 'Cars' => [ 'Volvo' => 0, 'Mercedes' => 0, 'BMW' => 0, 'Audi' => 0 ], 'Motorcycle' => [ 'Ducati' => 0, 'Honda' => 0, 'Suzuki' => 0, 'KTM' => 0 ] ]; $semi = [ 'Volvo' => 1, 'Audi' => 1 ];
Ich möchte, dass das Array so aussieht:
Array ( [Cars] => Array ( [Volvo] => 1 [Mercedes] => 0 [BMW] => 0 [Audi] => 1 ) [Motorcycle] => Array ( [Ducati] => 0 [Honda] => 0 [Suzuki] => 0 [KTM] => 0 ) )
Ich erhalte das $semi-Array aus dem Eingabefeld und möchte es in $full zusammenführen, um es in meiner Datenbank zu speichern.
Ich habe versucht array_replace()
wie:
$replaced = array_replace($full, $semi);
你只需要访问“leafnodes”,使用
array_walk_recursive()
就可以非常直接地迭代和修改整个数组。现代“箭头函数”语法允许访问半数组,而无需编写
use()
。这种方法绝对不会进行迭代函数调用。它通过引用 (
&$v
) 修改$v
,使用“加法赋值”组合运算符 (+=
) 以及空合并operator (??
) 有条件地增加半数组中找到的全数组中的值。代码:(演示)
不使用
array_walk_recursive()
将需要使用嵌套循环来增加合格的制造商。代码:(演示)
您应该循环
$semi
数组并检查它是否存在于$full
数组之一中,然后添加到其中: