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

PHP多维数组按number键分组求和:两种结构的高效实现方法

高效分组求和解决方案

别用嵌套foreach,那会让时间复杂度升到O(n²),效率很低。下面是两种数组结构的最优解法,都是单循环遍历一次原数组,时间复杂度O(n),计算量最小:

第一种数组结构(values嵌套子数组)

$array = [
    ['number' => 1, 'values' => ['a' => 1, 'b' => 2]],
    ['number' => 2, 'values' => ['a' => 4, 'b' => 1]],
    ['number' => 2, 'values' => ['a' => 1, 'b' => 4]],
    ['number' => 2, 'values' => ['a' => 1, 'b' => 1]],
    ['number' => 3, 'values' => ['a' => 2, 'b' => 4]]
];

$array_output = [];
foreach ($array as $item) {
    $number = $item['number'];
    // 初始化当前number的分组项
    if (!isset($array_output[$number])) {
        $array_output[$number] = [
            'number' => $number,
            'values' => ['a' => 0, 'b' => 0]
        ];
    }
    // 累加对应数值
    $array_output[$number]['values']['a'] += $item['values']['a'];
    $array_output[$number]['values']['b'] += $item['values']['b'];
}
// 重置为连续数字索引
$array_output = array_values($array_output);

// 输出结果
print_r($array_output);

执行后会得到你期望的分组求和结果,临时用number作为键来分组,最后用array_values()把索引转成连续数字。

第二种数组结构(直接包含a、b字段)

$array = [
    ['number' => 1, 'a' => 1, 'b' => 2],
    ['number' => 2, 'a' => 4, 'b' => 1],
    ['number' => 2, 'a' => 1, 'b' => 4],
    ['number' => 2, 'a' => 1, 'b' => 1],
    ['number' => 3, 'a' => 2, 'b' => 4]
];

$array_output = [];
foreach ($array as $item) {
    $number = $item['number'];
    // 初始化当前number的分组项
    if (!isset($array_output[$number])) {
        $array_output[$number] = [
            'number' => $number,
            'a' => 0,
            'b' => 0
        ];
    }
    // 直接累加a、b字段
    $array_output[$number]['a'] += $item['a'];
    $array_output[$number]['b'] += $item['b'];
}
// 重置为连续数字索引
$array_output = array_values($array_output);

// 输出结果
print_r($array_output);

这个逻辑和第一种一致,只是不需要嵌套访问values子数组,直接操作a、b字段即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 16:40:59