基于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
相关产品推荐
相关产品推荐

