PHP数组去重合并并累加同规格商品购买数量实现方案
PHP实现电商订单SKU维度去重与采购量汇总方案
核心逻辑
- 遍历所有订单下的
item_list商品节点 - 以商品唯一标识
model_sku作为分组键做去重判定 - 首次匹配到某SKU时,保留商品名称、单价等固定属性,初始化采购量统计字段
- 重复匹配到相同SKU时,直接累加
model_quantity_purchased数值,不新增重复条目 - 遍历结束后重置数组索引,输出的结果可直接用于拣货单渲染
可直接复用的代码
<?php // 此处替换为你从电商API获取的原始JSON返回值 $rawApiResponse = '你的订单API原始JSON字符串'; // 解码为关联数组,注意json_decode第二个参数固定传true $orderList = json_decode($rawApiResponse, true); $pickSummary = []; foreach ($orderList as $order) { // 过滤无商品条目的异常订单 if (empty($order['item_list']) || !is_array($order['item_list'])) { continue; } foreach ($order['item_list'] as $item) { $sku = $item['model_sku']; // 首次遇到该SKU时初始化汇总条目 if (!isset($pickSummary[$sku])) { $pickSummary[$sku] = [ 'model_sku' => $item['model_sku'], 'model_name' => $item['model_name'], 'spec' => $item['spec'] ?? '', // 可根据自身业务字段增减保留的属性 'unit_price' => $item['model_price'], 'total_quantity' => 0 ]; } // 累加采购量 $pickSummary[$sku]['total_quantity'] += intval($item['model_quantity_purchased']); } } // 转为索引数组,输出拣货单所需的标准结构 $pickList = array_values($pickSummary);
结果验证
以常规测试订单数据为例,最终输出的汇总结构如下:
Array ( [0] => Array ( [model_sku] => SKU001 [model_name] => 纯棉圆领T恤 [spec] => 白色M码 [unit_price] => 99 [total_quantity] => 5 ) [1] => Array ( [model_sku] => SKU002 [model_name] => 纯棉圆领T恤 [spec] => 黑色L码 [unit_price] => 99 [total_quantity] => 1 ) [2] => Array ( [model_sku] => SKU003 [model_name] => 水洗牛仔短裤 [spec] => 蓝色30码 [unit_price] => 159 [total_quantity] => 2 ) )
适配提示
- 如果业务需要按仓库、配送路线等维度拆分拣货单,只需要给
$pickSummary增加一层分组维度键即可,核心累加逻辑不变 - 若存在同SKU对应不同商品属性的脏数据,可以在累加前增加属性一致性校验,避免拣货信息错误
- 该方案时间复杂度为O(n),单批次处理10万级订单条目也不会出现性能瓶颈
内容的提问来源于stack exchange,提问作者Media Posternet1
相关产品推荐
相关产品推荐

