我有以下数组结构:
[0] => Array
(
[name] => Spinat boller
[amount] => 3
[category] => Bløddej og Boller
[unit_amount] => 15
)
[1] => Array
(
[name] => Bedste boller
[amount] => 15
[category] => Bløddej og Boller
[unit_amount] => 15
)
[2] => Array
(
[name] => Grov boller
[amount] => 15
[category] => Bløddej og Boller
[unit_amount] => 15
)
我有多个这些数组,我想将它们合并到AMOUNT KEY上。这意味着如果我有另一个包含这个的数组:
[0] => Array
(
[name] => Spinat boller
[amount] => 2
[category] => Bløddej og Boller
[unit_amount] => 15
)
我合并它,它会显示:
[0] => Array
(
[name] => Spinat boller
[amount] => 5
[category] => Bløddej og Boller
[unit_amount] => 15
)
显然我可以手动遍历这个,但我希望我能以某种方式利用PHP Merge功能,但不知道如何去做。
谢谢大家!
*编辑1 * 如果我只是执行array_merge函数,它只是将它们全部附加在一起,所以我来自:
[0] => Array
(
[name] => Spinat boller
[amount] => 3
[category] => Bløddej og Boller
[unit_amount] => 15
)
为:
[0] => Array
(
[name] => Spinat boller
[amount] => 3
[category] => Bløddej og Boller
[unit_amount] => 15
)
[0] => Array
(
[name] => Spinat boller
[amount] => 2
[category] => Bløddej og Boller
[unit_amount] => 15
)
但我想:
[0] => Array
(
[name] => Spinat boller
[amount] => 3
[category] => Bløddej og Boller
[unit_amount] => 15
)
[0] =>排列 ( [name] => Spinat boller [金额] =>五 [category] => BløddejogBoller [unit_amount] => 15 )
注意金额现在是5(其他数组有2和3)。其他所有内容都相同且匹配,只需添加和增加金额。
答案 0 :(得分:0)
所以我考虑了一下,看看是否有可能在单个表达式中进行。
您必须组合相当多的功能,但行为与手动迭代相同。这种功能方法的结果如下所示:
$result = array_values(
array_merge(
...array_reverse(
array_map(function ($arr) {
return array_combine(
array_column($arr, 'name'),
array_values($arr)
);
}, [$arr1, $arr2, $arr3])
)
)
);
虽然可以做到,但我坚持使用迭代方法最好是出于可维护性原因:
$tmp = [];
foreach ($arrays as $arr) {
foreach ($arr as $elem) {
if (!isset($tmp[$elem['name']])) {
$tmp[$elem['name']] = $elem;
}
}
}
$result = array_values($tmp);