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

如何按类别循环数组数据并统计各类别金额总和

按类别统计金额总和的PHP实现方案

问题说明

现有一个包含序号、类别、描述、金额的数组,需要按类别分组展示数据,并统计每个类别的金额总和。当前已实现分组展示功能,但缺少金额求和逻辑。

原始数组

$arr = [
    [1, "Category 1", "Desc 1", 10000],
    [2, "Category 1", "Desc 2", 5000],
    [3, "Category 1", "Desc 3", 2500],
    [4, "Category 1", "Desc 4", 3000],
    [5, "Category 1", "Desc 5", 15000],
    [1, "Category 2", "Ket 1", 10000],
    [2, "Category 2", "Ket 2", 5000],
    [3, "Category 2", "Ket 3", 2500],
    [1, "Category 3", "Kata 1", 3000],
    [2, "Category 3", "Kata 2", 15000],
];

期望输出

Category 1
1. Desc 1 - 10000
2. Desc 2 - 5000
3. Desc 3 - 2500
4. Desc 4 - 3000
5. Desc 5 - 15000
Total = 35500
Category 2
1. Ket 1 - 10000
2. Ket 2 - 5000
3. Ket 3 - 2500
Total = 17500
Category 3
1. Kata 1 - 3000
2. Kata 2 - 15000
Total = 18000

现有实现代码

$array = [
    [1, "Category 1", "Desc 1", 10000],
    [2, "Category 1", "Desc 2", 5000],
    [3, "Category 1", "Desc 3", 2500],
    [4, "Category 1", "Desc 4", 3000],
    [5, "Category 1", "Desc 5", 15000],
    [1, "Category 2", "Ket 1", 10000],
    [2, "Category 2", "Ket 2", 5000],
    [3, "Category 2", "Ket 3", 2500],
    [1, "Category 3", "Kata 1", 3000],
    [2, "Category 3", "Kata 2", 15000],
];

$cat = '';
$x = 0;
foreach ($array as $key => $data) {
    if ($data[1] != $cat) {
        echo $data[1] . PHP_EOL;
        $cat = $data[1];
    }
    
    echo $data[0] . ". " . $data[2] . " - " . $data[3] . PHP_EOL;
}

解决方案

方案一:在原遍历逻辑中增加求和

直接修改现有代码,通过维护总和变量,在类别切换时输出上一个类别的总和,最后处理最后一个类别的统计:

$array = [
    [1, "Category 1", "Desc 1", 10000],
    [2, "Category 1", "Desc 2", 5000],
    [3, "Category 1", "Desc 3", 2500],
    [4, "Category 1", "Desc 4", 3000],
    [5, "Category 1", "Desc 5", 15000],
    [1, "Category 2", "Ket 1", 10000],
    [2, "Category 2", "Ket 2", 5000],
    [3, "Category 2", "Ket 3", 2500],
    [1, "Category 3", "Kata 1", 3000],
    [2, "Category 3", "Kata 2", 15000],
];

$cat = '';
$total = 0;
foreach ($array as $key => $data) {
    // 类别切换时,输出上一个类别的总和(首次循环跳过)
    if ($data[1] != $cat) {
        if ($cat !== '') {
            echo "Total = " . $total . PHP_EOL . PHP_EOL;
        }
        echo $data[1] . PHP_EOL;
        $cat = $data[1];
        $total = 0; // 重置当前类别总和
    }
    
    echo $data[0] . ". " . $data[2] . " - " . $data[3] . PHP_EOL;
    $total += $data[3]; // 累加当前项金额
}

// 输出最后一个类别的总和
echo "Total = " . $total . PHP_EOL;

方案二:先分组再统计(更清晰)

先将数组按类别分组,再遍历分组数据进行展示和求和,逻辑更直观,适合后续复用分组数据的场景:

$array = [
    [1, "Category 1", "Desc 1", 10000],
    [2, "Category 1", "Desc 2", 5000],
    [3, "Category 1", "Desc 3", 2500],
    [4, "Category 1", "Desc 4", 3000],
    [5, "Category 1", "Desc 5", 15000],
    [1, "Category 2", "Ket 1", 10000],
    [2, "Category 2", "Ket 2", 5000],
    [3, "Category 2", "Ket 3", 2500],
    [1, "Category 3", "Kata 1", 3000],
    [2, "Category 3", "Kata 2", 15000],
];

// 按类别分组
$grouped = [];
foreach ($array as $item) {
    $category = $item[1];
    if (!isset($grouped[$category])) {
        $grouped[$category] = [];
    }
    $grouped[$category][] = $item;
}

// 遍历分组数据,输出并统计总和
foreach ($grouped as $category => $items) {
    echo $category . PHP_EOL;
    $total = 0;
    foreach ($items as $item) {
        echo $item[0] . ". " . $item[2] . " - " . $item[3] . PHP_EOL;
        $total += $item[3];
    }
    echo "Total = " . $total . PHP_EOL . PHP_EOL;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 04:05:19