物流系统有一条订单数据,里面包含多个商品,由于部分原因,出现了多个商品编号实际对应同一商品(物料编号相同)的情况。现在需要统计出每个商品的总数量,以进行后续发货操作。
数据格式如下:
$items = [
[
'product_code' => 'Zn:C-CC-002-001-029-J-1',
'item_code' => 'C-CC-002-001-029-J',
'quantity' => 2
],
[
'product_code' => 'Sb:C-CC-002-001-029-J-2',
'item_code' => 'C-CC-002-001-029-J',
'quantity' => 1
],
[
'product_code' => 'Sb:C-CC-002-002-J-2',
'item_code' => 'C-CC-002-002-J',
'quantity' => 1
],
[
'product_code' => 'Zz:C-CC-002-002-J-4',
'item_code' => 'C-CC-002-002-J',
'quantity' => 1
]
];
可以遍历商品,如果初次遇到该商品物料编码,则该商品总数量为该商品的数量;如果不是初次遇到该商品物料编码,则商品总数量为该商品的数量与之前的数量之和。
代码实现如下:
$items = [
[
'product_code' => 'Zn:C-CC-002-001-029-J-1',
'item_code' => 'C-CC-002-001-029-J',
'quantity' => 2
],
[
'product_code' => 'Sb:C-CC-002-001-029-J-2',
'item_code' => 'C-CC-002-001-029-J',
'quantity' => 1
],
[
'product_code' => 'Sb:C-CC-002-002-J-2',
'item_code' => 'C-CC-002-002-J',
'quantity' => 1
],
[
'product_code' => 'Zz:C-CC-002-002-J-4',
'item_code' => 'C-CC-002-002-J',
'quantity' => 1
]
];
$newItems = []; // 用来保存结果
$itemCodes = []; // 记录遇到的商品物料编码
foreach ($items as $item) {
if (in_array($item['item_code'], $itemCodes)) {
// 已经存在,则增加产品数量
foreach ($newItems as &$newItem) {
if ($newItem['item_code'] == $item['item_code']) {
$newItem['quantity'] += $item['quantity'];
break;
}
}
unset($newItem);
} else {
// 初次遇到,则添加产品
$itemCodes[] = $item['item_code'];
$newItems[] = $item;
}
}
print_r($newItems);
/* 结果
Array
(
[0] => Array
(
[product_code] => Zn:C-CC-002-001-029-J-1
[item_code] => C-CC-002-001-029-J
[quantity] => 3
)
[1] => Array
(
[product_code] => Sb:C-CC-002-002-J-2
[item_code] => C-CC-002-002-J
[quantity] => 2
)
)
*/