Laravel二维集合按两列分组并对第三列求和的实现方法
Laravel集合按SKU和Batch分组并求和Qty_Total
原始集合
$stocks = collect( [ ['sku' => '123', 'batch' => '123', 'qty_total' => 1], ['sku' => '1233', 'batch' => '123', 'qty_total' => 2], ['sku' => '123', 'batch' => '123', 'qty_total' => 3], ['sku' => '5', 'batch' => '123', 'qty_total' => 4], ] );
目标输出
[ ['sku' => '123', 'batch' => '123', 'qty_total' => 4], ['sku' => '1233', 'batch' => '123', 'qty_total' => 2], ['sku' => '5', 'batch' => '123', 'qty_total' => 4], ]
解决方案代码
你已经完成了分组步骤,后续只需对每个分组的qty_total求和并重组结构即可:
$result = $stocks ->groupBy(['sku', 'batch'], true) ->map(function ($group) { $firstItem = $group->first(); return [ 'sku' => $firstItem['sku'], 'batch' => $firstItem['batch'], 'qty_total' => $group->sum('qty_total') ]; }) ->values();
代码说明
groupBy(['sku', 'batch'], true):按sku和batch的组合键分组,第二个参数true保留原始键的类型。map():遍历每个分组重组数据:- 取分组内第一个元素的
sku和batch(分组依据就是这两个字段,所以分组内所有元素的这两个值完全一致)。 - 用
sum('qty_total')计算当前分组的总数量。
- 取分组内第一个元素的
values():移除分组产生的层级键,将集合转为连续索引的数组结构,匹配目标输出格式。
内容的提问来源于stack exchange,提问作者Maksim Borodov
相关产品推荐
相关产品推荐

