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

PHP如何在foreach/while循环中按supercategory键汇总totalsale值

按Supercategory分组并求和Totalsale的解决方案

没问题,我来帮你搞定这个分组求和的需求!先假设你的关联数组结构大概是这样的(模拟一个贴近实际场景的示例):

$salesData = [
    ['supercategory' => '电子产品', 'totalsale' => 1500],
    ['supercategory' => '服装', 'totalsale' => 800],
    ['supercategory' => '电子产品', 'totalsale' => 2000],
    ['supercategory' => '家居', 'totalsale' => 1200],
    ['supercategory' => '服装', 'totalsale' => 500],
];

方法一:使用foreach循环(最常用且直观)

这是实现需求最简单的方式,我们只需要初始化一个空数组来存储分组后的结果,然后遍历原数组逐步累加:

// 初始化结果数组
$groupedSales = [];

foreach ($salesData as $item) {
    $category = $item['supercategory'];
    $sale = $item['totalsale'];
    
    // 如果该分类已经在结果数组中,就累加销售额
    if (isset($groupedSales[$category])) {
        $groupedSales[$category] += $sale;
    } else {
        // 如果不存在,就新增这个分类并赋值初始销售额
        $groupedSales[$category] = $sale;
    }
}

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

运行后你会得到这样的结果:

Array
(
    [电子产品] => 3500
    [服装] => 1300
    [家居] => 1200
)

方法二:使用while循环(适合习惯迭代器的场景)

如果你更倾向于用while循环,可以结合数组迭代器来实现,这里避开了已弃用的each()函数,用更现代的ArrayIterator:

$iterator = new ArrayIterator($salesData);
$groupedSales = [];

while ($iterator->valid()) {
    $item = $iterator->current();
    $category = $item['supercategory'];
    $sale = $item['totalsale'];
    
    if (isset($groupedSales[$category])) {
        $groupedSales[$category] += $sale;
    } else {
        $groupedSales[$category] = $sale;
    }
    
    $iterator->next();
}

print_r($groupedSales);

这个方法和foreach的逻辑完全一致,只是遍历方式不同,最终结果也一样。

额外提示

如果你的数组里可能存在totalsale为空或者非数值的情况,可以在累加前加个判断,避免计算错误:

$sale = is_numeric($item['totalsale']) ? (float)$item['totalsale'] : 0;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:12:57