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

如何按Date键分组,对A_Total、B_Total、C_Total分别求和?

PHP按日期分组求和A_Total、B_Total、C_Total字段

需求说明

现有一个包含Date、A_Total、B_Total、C_Total字段的数组,需要按Date分组,对每组对应的三个Total字段分别求和,得到聚合后的结果。

源数组

Array
(
    [0] => Array
        (
            [Date] => 2022-10-23
            [A_Total] => 547
            [B_Total] => 70
            [C_Total] => 83
        )

    [1] => Array
        (
            [Date] => 2022-10-24
            [A_Total] => 547
            [B_Total] => 70
            [C_Total] => 83
        )

    [2] => Array
        (
            [Date] => 2022-10-25
            [A_Total] => 552
            [B_Total] => 70
            [C_Total] => 83
        )

    [3] => Array
        (
            [Date] => 2022-10-23
            [A_Total] => 5
            [B_Total] => 1
            [C_Total] => 19
        )

    [4] => Array
        (
            [Date] => 2022-10-24
            [A_Total] => 5
            [B_Total] => 1
            [C_Total] => 19
        )

    [5] => Array
        (
            [Date] => 2022-10-25
            [A_Total] => 5
            [B_Total] => 1
            [C_Total] => 19
        )

    [6] => Array
        (
            [Date] => 2022-10-23
            [A_Total] => 557
            [B_Total] => 134
            [C_Total] => 51
        )

    [7] => Array
        (
            [Date] => 2022-10-24
            [A_Total] => 557
            [B_Total] => 134
            [C_Total] => 51
        )

    [8] => Array
        (
            [Date] => 2022-10-25
            [A_Total] => 557
            [B_Total] => 134
            [C_Total] => 51
        )

)

预期结果

Array
(
    [0] => Array
        (
            [Date] => 2022-10-23
            [A_Total] => 1019
            [B_Total] => 205
            [C_Total] => 153
        )

    [1] => Array
        (
            [Date] => 2022-10-24
            [A_Total] => 1019
            [B_Total] => 205
            [C_Total] => 153
        )

    [2] => Array
        (
            [Date] => 2022-10-25
            [A_Total] => 1114
            [B_Total] => 205
            [C_Total] => 153
        )

)

解决方案

方法1:基础循环遍历

通过遍历源数组,以日期为键创建临时数组,累加对应字段的值,最后转换为索引数组:

$sourceArray = // 你的源数组

$grouped = [];
foreach ($sourceArray as $item) {
    $date = $item['Date'];
    if (!isset($grouped[$date])) {
        $grouped[$date] = [
            'Date' => $date,
            'A_Total' => 0,
            'B_Total' => 0,
            'C_Total' => 0
        ];
    }
    $grouped[$date]['A_Total'] += $item['A_Total'];
    $grouped[$date]['B_Total'] += $item['B_Total'];
    $grouped[$date]['C_Total'] += $item['C_Total'];
}

// 转为索引数组
$result = array_values($grouped);
print_r($result);

方法2:使用array_reduce简化代码

利用array_reduce函数遍历数组并累加,代码更简洁:

$sourceArray = // 你的源数组

$result = array_values(array_reduce($sourceArray, function ($carry, $item) {
    $date = $item['Date'];
    if (!isset($carry[$date])) {
        $carry[$date] = $item;
    } else {
        $carry[$date]['A_Total'] += $item['A_Total'];
        $carry[$date]['B_Total'] += $item['B_Total'];
        $carry[$date]['C_Total'] += $item['C_Total'];
    }
    return $carry;
}, []));

print_r($result);

两种方法都会得到与预期一致的分组求和结果,可根据代码风格偏好选择使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 09:55:20