多维数组内同一商品数量求和问题

老牛浏览 404评论 0发表于

1. 问题说明

物流系统有一条订单数据,里面包含多个商品,由于部分原因,出现了多个商品编号实际对应同一商品(物料编号相同)的情况。现在需要统计出每个商品的总数量,以进行后续发货操作。

数据格式如下:

php
$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
    ]
];

2. 思路分析

可以遍历商品,如果初次遇到该商品物料编码,则该商品总数量为该商品的数量;如果不是初次遇到该商品物料编码,则商品总数量为该商品的数量与之前的数量之和。

代码实现如下:

php
$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
        )
)
*/
点赞
收藏
暂无评论,快来发表评论吧~
私信
老牛@ilaoniu
老牛,俗称哞哞。单纯的九零后理工小青年。喜欢折腾,爱玩,爱音乐,爱游戏,爱电影,爱旅游...
最后活跃于