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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.07 11:33:15