您可能遇到过,内置的 array_merge( PHP 中的 ) 函数在组合多个数组时会覆盖共享键的值。当您需要合并数组并对共享键的值求和时,这可能会出现问题。
为了解决这一挑战,我们可以创建一个自定义函数或利用数组操作来实现我们期望的行为。让我们探索几种可能的方法:
使用自定义函数
<code class="php">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; }</code>
此函数接受任意数量的数组作为参数,并返回一个关联数组与组合键和求和值。
使用错误抑制
<code class="php">$sums = array(); foreach (array_keys($a1 + $a2) as $key) { $sums[$key] = @($a1[$key] + $a2[$key]); }</code>
此技术利用错误抑制运算符 (@) 在执行加法之前检查两个数组中是否存在键。
使用数组映射
<code class="php">$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));</code>
此方法使用 array_fill_keys() 创建映射然后使用 array_map() 添加与共享键关联的值。
组合解决方案
<code class="php">$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));</code>
此组合将错误抑制技术与 array_walk() 结合起来迭代键并执行
结论
根据您的具体需求,您可以选择最合适的方法来合并多个数组并对共享键的值求和。无论是使用自定义函数、错误抑制、数组映射还是它们的组合,这些解决方案都提供了一种简洁有效的方法来实现所需的结果。
以上是如何在 PHP 中合并多个关联数组和共享键的求和值?的详细内容。更多信息请关注PHP中文网其他相关文章!