PHP 8.0 中合并多个一维关联数组并累加同键数值,需用 array_reduce() 或 foreach 手动遍历累加,因 array_merge() 会覆盖而非相加;注意校验数值类型并处理类型严格性。

PHP 8.0 中,若要合并多个数组并让相同键的数值型值自动相加,不能直接用 array_merge()(它会覆盖而非累加),需手动遍历或使用更精准的聚合方式。核心思路是:遍历所有数组,对每个键累计求和。
用 array_reduce() + array_merge_recursive() 配合自定义累加
这是较简洁、函数式风格的做法,适合二维以下结构:
$arr1 = ['a' => 10, 'b' => 20];
$arr2 = ['a' => 5, 'c' => 30];
$arr3 = ['b' => 15, 'c' => 25];
$result = array_reduce(
[$arr1, $arr2, $arr3],
function ($carry, $item) {
foreach ($item as $key => $value) {
$carry[$key] = ($carry[$key] ?? 0) + $value;
}
return $carry;
},
[]
);
// 结果:['a' => 15, 'b' => 35, 'c' => 55]
用 foreach 循环逐个合并(最直观可靠)
适合新手理解,也便于加入类型判断(如跳过非数字键):
修复 Core bailout 状态损坏安全问题,以及 BZ2、DOM、PDO、Opcache/JIT 内存与执行错误,改进 Unicode 字素处理、URL 解析、TLS 流状态、信号分发及会话错误处理。
- 初始化一个空结果数组
- 把所有待合并的数组放进一个数组中(如
[$arr1, $arr2, $arr3]) - 外层遍历数组列表,内层遍历每个数组的键值对
- 对每个键,用空合并运算符
?? 0确保初始值为 0,再加当前值
处理字符串键 + 数值值的注意事项
PHP 8.0 对类型更严格,但只要键是字符串、值是整数/浮点数,上述方法都适用。需注意:
- 如果某键对应的是字符串(如
'b' => 'hello'),直接相加会触发隐式转换('hello' + 20 → 20),建议提前过滤或校验 - 若需保留非数值键原样(不参与相加),可在累加前加判断:
is_numeric($value) - 关联数组键名区分大小写,
'A'和'a'被视为不同键
一维数组可直接用 array_sum() 配合 array_column()?不适用
这个组合只适用于「多维数组中提取某一列再求和」,不是合并多个一维数组。别混淆场景——你要的是横向合并(同键叠加),不是纵向统计。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!










