You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP是否有单命令实现同键数组合并并求和对应值?

嵌套二维数组按键合并并求和的实现方案

嘿,刚好碰到过类似的需求!很遗憾的是,PHP里并没有原生的单条命令能直接实现这种嵌套二维数组的按键合并+数值求和操作——毕竟这个需求要处理两层维度的键匹配和数值累加,原生函数大多只针对单层数组或者简单的合并场景。不过我们可以用简洁的遍历写法或者函数组合来实现,先看看你给出的示例数组:

原始数组1:

Array ( 
    [2017-03-01] => Array ( [apples] => 2 [bananas] => 1 ) 
    [2017-03-02] => Array ( [apples] => 3 [bananas] => 6 ) 
    [2017-03-03] => Array ( [apples] => 0 [bananas] => 4 ) 
)

原始数组2:

Array ( 
    [2017-03-01] => Array ( [apples] => 3 [bananas] => 2 ) 
    [2017-03-02] => Array ( [apples] => 4 [bananas] => 7 ) 
    [2017-03-03] => Array ( [apples] => 1 [bananas] => 5 ) 
)

方案一:直观遍历实现(最易维护)

这是最直接的写法,逻辑清晰,适合后续调试和修改:

$array1 = [
    '2017-03-01' => ['apples' => 2, 'bananas' => 1],
    '2017-03-02' => ['apples' => 3, 'bananas' => 6],
    '2017-03-03' => ['apples' => 0, 'bananas' => 4]
];

$array2 = [
    '2017-03-01' => ['apples' => 3, 'bananas' => 2],
    '2017-03-02' => ['apples' => 4, 'bananas' => 7],
    '2017-03-03' => ['apples' => 1, 'bananas' => 5]
];

// 以第一个数组为结果基础
$result = $array1;

// 遍历第二个数组的每个日期和水果数据
foreach ($array2 as $date => $fruits) {
    foreach ($fruits as $fruit => $count) {
        // 用null合并运算符处理可能不存在的键,避免报错
        $result[$date][$fruit] = ($result[$date][$fruit] ?? 0) + $count;
    }
}

print_r($result);

执行后就能得到你期望的结果:

Array ( 
    [2017-03-01] => Array ( [apples] => 5 [bananas] => 3 ) 
    [2017-03-02] => Array ( [apples] => 7 [bananas] => 13 ) 
    [2017-03-03] => Array ( [apples] => 1 [bananas] => 9 ) 
)

方案二:函数组合实现(更简洁)

如果想追求更“函数式”的写法,可以用array_merge_recursive结合array_map来实现,本质还是封装了遍历逻辑,但代码更紧凑:

$array1 = [/* 你的数组1内容 */];
$array2 = [/* 你的数组2内容 */];

// 先递归合并数组,相同键的数值会被转为数组
$merged = array_merge_recursive($array1, $array2);

// 遍历处理每个日期下的水果数据,对数组类型的数值求和
$result = array_map(function($dateData) {
    return array_map(function($values) {
        return is_array($values) ? array_sum($values) : $values;
    }, $dateData);
}, $merged);

print_r($result);

总结

没有真正意义上的“单条命令”能一步完成这个需求,因为涉及到嵌套层级的键匹配和数值累加,必须要做层级遍历处理。上面两种方案各有优劣:第一种逻辑直观,容错性强,适合复杂场景;第二种写法简洁,适合数组结构规范统一的场景。

内容的提问来源于stack exchange,提问作者Imnotapotato

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 06:58:02