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

基于created_by字段按用户分组实现数组count与total求和

按created_by分组并累加count和total的实现方案

嘿,这个需求在日常开发里挺常见的,我给你两种思路来实现——一种是在PHP里处理已获取的数组,另一种是直接在MySQL层面完成分组求和(更高效)。

先明确需求

原始数组:

$initialArray = [
    ['created_by' => 4, 'count' => 1, 'total' => 300],
    ['created_by' => 4, 'count' => 1, 'total' => 450],
    ['created_by' => 3, 'count' => 1, 'total' => 500]
];

目标输出:

[
    ['created_by' => 4, 'count' => 2, 'total' => 750],
    ['created_by' => 3, 'count' => 1, 'total' => 500]
]

方案1:PHP数组处理

通过遍历原始数组,以created_by为键建立临时分组,逐步累加对应值:

// 初始数组
$initialArray = [
    ['created_by' => 4, 'count' => 1, 'total' => 300],
    ['created_by' => 4, 'count' => 1, 'total' => 450],
    ['created_by' => 3, 'count' => 1, 'total' => 500]
];

$groupedData = [];

foreach ($initialArray as $item) {
    $userId = $item['created_by'];
    
    // 首次遇到该用户时,初始化分组条目
    if (!isset($groupedData[$userId])) {
        $groupedData[$userId] = [
            'created_by' => $userId,
            'count' => 0,
            'total' => 0
        ];
    }
    
    // 累加count和total
    $groupedData[$userId]['count'] += $item['count'];
    $groupedData[$userId]['total'] += $item['total'];
}

// 转换为数字索引数组(和目标格式一致)
$finalResult = array_values($groupedData);

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

这段代码逻辑很直观:用用户ID作为临时数组的键,避免重复创建用户条目;每次遍历都把当前条目的数值累加到对应分组里,最后用array_values()把关联数组转成连续的数字索引数组,就得到你要的结果了。


方案2:MySQL直接分组求和(推荐)

其实如果可以的话,直接在数据库查询时就完成分组求和会更高效,尤其是数据量较大的时候,能减少PHP的处理开销:

SELECT 
    created_by,
    SUM(count) AS count,
    SUM(total) AS total
FROM 
    your_table_name  -- 替换成你的实际表名
GROUP BY 
    created_by;

执行这个查询后,返回的结果就是已经按created_by分组、并累加好count和total的数据,直接用就行,不用再在PHP里处理数组啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 09:24:37