PHP:对多维数组按指定键统计次数并求和
PHP多维数组分组统计:次数+数值求和
问题场景
你有一个包含约1万条记录的PHP多维数组,结构示例如下:
$originalArray = [ 0 => [111, '14/02/2020', 36], 6 => [222, '29/12/2019', 1], 7 => [222, '27/11/2019', 3], 8 => [333, '12/09/2019', 4], ];
需要实现两个核心目标:
- 统计每个子数组第0位(
[0])的出现次数 - 计算对应子数组第2位(
[2])的总和
期望输出结果:
Array ( [0] => Array ( [0] => 111 [1] => 1 [2] => 36 ) [1] => Array ( [0] => 222 [1] => 2 [2] => 4 ) [2] => Array ( [0] => 333 [1] => 1 [2] => 4 ) )
解决方案:一次循环完成统计+求和
不用复杂的函数组合,直接遍历原数组就能搞定,逻辑简单还高效。核心思路是用子数组的[0]值作为临时容器的键,在遍历中累计次数和总和,最后再整理成你需要的索引数组格式:
// 初始化结果容器 $result = []; $temp = []; foreach ($originalArray as $item) { $key = $item[0]; // 如果该键已存在,累加次数和总和 if (isset($temp[$key])) { $temp[$key]['count']++; $temp[$key]['sum'] += $item[2]; } else { // 首次出现,初始化次数为1,总和为当前值 $temp[$key] = [ 'id' => $key, 'count' => 1, 'sum' => $item[2] ]; } } // 将临时关联数组转换成你需要的索引数组格式 foreach ($temp as $val) { $result[] = [$val['id'], $val['count'], $val['sum']]; } // 输出结果 print_r($result);
方案优势
- 效率拉满:只需要遍历原数组一次,处理1万条数据毫无压力,时间复杂度为O(n)
- 逻辑直观:每一步操作都清晰易懂,不需要记忆复杂的函数嵌套
- 扩展性强:如果后续需要新增统计维度(比如最早/最晚日期),直接在循环里加逻辑就行
输出验证
运行上述代码后,得到的结果完全符合你的期望:
Array ( [0] => Array ( [0] => 111 [1] => 1 [2] => 36 ) [1] => Array ( [0] => 222 [1] => 2 [2] => 4 ) [2] => Array ( [0] => 333 [1] => 1 [2] => 4 ) )
内容的提问来源于stack exchange,提问作者pee2pee
相关产品推荐
相关产品推荐

