
本文介绍如何在无数据库支持的 PHP 环境中,对来自 API 的销售交易多维数组按 product_title 分组,计算每组总营收(selling_price × quantity),并以降序排列输出结果。
本文介绍如何在无数据库支持的 php 环境中,对来自 api 的销售交易多维数组按 `product_title` 分组,计算每组总营收(`selling_price × quantity`),并以降序排列输出结果。
在实际开发中,我们常需处理从外部 API 获取的原始销售数据——这些数据通常以多维数组形式存在,且存在重复商品(如多个“Product 1”订单)。目标是:*合并同名商品的所有记录,汇总其总营收(即 `selling_price quantity`),再按营收由高到低排序展示**。
以下是一个简洁、健壮且兼容 PHP 7.0+ 的实现方案:
✅ 步骤一:分组并累加营收
使用关联数组以 product_title 为键,遍历原始数据,逐条计算单笔营收并累加:
$revenueByProduct = [];
foreach ($sales as $row) {
$title = $row['product_title'];
$revenue = $row['selling_price'] * $row['quantity'];
// PHP 7.0+ 空合并赋值语法(避免未定义索引警告)
$revenueByProduct[$title] ??= 0;
$revenueByProduct[$title] += $revenue;
}
? 注意:??= 是 PHP 7.0 引入的安全赋初值操作符,等价于 if (!isset($revenueByProduct[$title])) $revenueByProduct[$title] = 0;,比 += 单独使用更安全。
✅ 步骤二:按营收降序排序
使用 arsort() 对关联数组按值(即总营收)降序排列,同时保留键名(商品标题):
arsort($revenueByProduct);
该函数会维持键值映射关系,确保后续能正确输出“商品名 → 营收”对应结果。
✅ 步骤三:格式化输出(如 HTML 表格)
可直接用于前端展示,例如生成带表头的响应式表格:
echo '
| 商品名称 | 总营收(元) |
|---|---|
| %s | %.2f |
⚠️ 安全提示:使用 htmlspecialchars() 转义商品标题,防止 XSS 攻击;%.2f 确保金额保留两位小数,提升可读性。
? 验证示例输出
基于题设数据,最终输出为:
Product 1 / 450.00 Product 2 / 400.00 Product 4 / 360.00
完全符合“同标题聚合 + 营收降序”的核心需求。
✅ 扩展建议
- 若需同时显示销量总数或订单数,可在分组循环中额外维护 $quantitySum[$title] 和 $orderCount[$title];
- 如需 JSON 接口返回,可直接 json_encode($revenueByProduct);
- 对超大数据集(如万级记录),建议增加内存监控或分批次处理逻辑。
此方案轻量、高效、无依赖,适用于 Laravel、Symfony 或纯 PHP 脚本等各类环境,是处理前端聚合类报表的典型实践。











