You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP中合并多数组相同variant_id的quantity与price的方法

合并PHP数组中相同variant_id的条目(累加quantity,保留price)

需求说明

你需要将多个子数组中相同variant_id的条目合并:

  • 相同variant_id对应的quantity进行累加
  • price保持与原条目一致(假设同一variant_id的price都是相同的,如你的示例数据)

输入示例

$inputArray = Array (
    [0] => Array ( [variant_id] => 30929149493321 [quantity] => 1 [price] => 299.00 ),
    [1] => Array ( [variant_id] => 19663805153353 [quantity] => 1 [price] => 99.00 ),
    [2] => Array ( [variant_id] => 19663804989513 [quantity] => 6 [price] => 99.00 ),
    [3] => Array ( [variant_id] => 30929149493321 [quantity] => 1 [price] => 299.00 ),
    [4] => Array ( [variant_id] => 19663805153353 [quantity] => 1 [price] => 99.00 ),
    [5] => Array ( [variant_id] => 31108834754633 [quantity] => 1 [price] => 379.05 )
);

期望输出

Array (
    [0] => Array ( [variant_id] => 30929149493321 [quantity] => 2 [price] => 299.00 ),
    [1] => Array ( [variant_id] => 19663805153353 [quantity] => 2 [price] => 99.00 ),
    [2] => Array ( [variant_id] => 19663804989513 [quantity] => 6 [price] => 99.00 ),
    [3] => Array ( [variant_id] => 31108834754633 [quantity] => 1 [price] => 379.05 )
);

解决方案代码

这里用一个高效的循环实现,利用variant_id作为临时数组的键来快速判断重复:

// 你的原始输入数组
$inputArray = [
    ['variant_id' => 30929149493321, 'quantity' => 1, 'price' => 299.00],
    ['variant_id' => 19663805153353, 'quantity' => 1, 'price' => 99.00],
    ['variant_id' => 19663804989513, 'quantity' => 6, 'price' => 99.00],
    ['variant_id' => 30929149493321, 'quantity' => 1, 'price' => 299.00],
    ['variant_id' => 19663805153353, 'quantity' => 1, 'price' => 99.00],
    ['variant_id' => 31108834754633, 'quantity' => 1, 'price' => 379.05],
];

$mergedArray = [];

foreach ($inputArray as $item) {
    $id = $item['variant_id'];
    
    // 如果当前variant_id已存在,累加quantity
    if (isset($mergedArray[$id])) {
        $mergedArray[$id]['quantity'] += $item['quantity'];
    } else {
        // 不存在则直接添加条目,用variant_id作为临时键
        $mergedArray[$id] = $item;
    }
}

// 将关联数组转为数字索引数组,匹配期望输出格式
$mergedArray = array_values($mergedArray);

// 打印结果
print_r($mergedArray);

代码说明

  1. 临时数组键的使用:用variant_id作为$mergedArray的键,这样可以在O(1)时间内判断该条目是否已存在,避免嵌套循环,提升效率。
  2. 累加逻辑:如果条目已存在,只需要对quantity进行累加操作,price因为同一variant_id值一致,无需修改。
  3. 索引重置:最后用array_values()将关联数组转换为数字索引数组,和你期望的输出格式完全匹配。

内容的提问来源于stack exchange,提问作者Muneeb Ahmad

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 22:43:14