合并数组并对共享键值求和
在组合与共享键关联的值时,经常需要合并多个关联数组。默认情况下,数组合并会覆盖冲突的值,如提供的示例中所示。为了解决这个问题,我们提出了一系列方法,可以有效地为共享密钥添加值,同时保留唯一密钥。
使用数组中间体:
一种方法是计算使用数组中间值手动求和。这涉及到迭代合并数组的键并对输入数组中每个键的值求和。
$sums = array(); foreach (array_keys($a1 $a2) as $key) { $sums[$key] = (isset($a1[$key]) ? $a1[$key] : 0) (isset($a2[$key]) ? $a2[$key] : 0); }
映射和缩减:
另一种方法涉及为每个唯一键创建具有零值的中间数组。然后将它们与原始数组合并并映射以计算总和。
$keys = array_fill_keys(array_keys($a1 $a2), 0); $sums = array_map(function ($a1, $a2) { return $a1 $a2; }, array_merge($keys, $a1), array_merge($keys, $a2));
数组遍历:
同样,您可以使用数组遍历来计算共享的总和键。
$sums = array_fill_keys(array_keys($a1 $a2), 0); array_walk($sums, function (&$value, $key, $arrs) { $value = @($arrs[0][$key] $arrs[1][$key]); }, array($a1, $a2));
具有动态参数的可重用函数:
最后,您可以创建一个可重用函数,它接受无限的数组数量并计算共享密钥的值之和。
function array_sum_identical_keys() { $arrays = func_get_args(); $keys = array_keys(array_reduce($arrays, function ($keys, $arr) { return $keys $arr; }, array())); $sums = array(); foreach ($keys as $key) { $sums[$key] = array_reduce($arrays, function ($sum, $arr) use ($key) { return $sum @$arr[$key]; }); } return $sums; }
这些解决方案提供了合并多个关联数组并计算共享键值之和的有效方法,为各种场景提供了灵活性和代码可重用性。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3