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

Laravel中按供应商ID维度累加多维数组quantity值的实现方案

按供应商ID维度累加多维数组中quantity值的解决方案

针对你遇到的问题——已经有按供应商ID分组的多维数组,但无法按维度拆分统计quantity总和,这里有几个简单有效的方案:

方案1:原生PHP数组遍历计算

因为你的$quantities数组已经按供应商ID作为键进行了分组,直接遍历每个供应商组累加即可:

$supplierQuantityTotals = [];

foreach ($quantities as $supplierId => $productList) {
    $totalQty = 0;
    foreach ($productList as $product) {
        $totalQty += $product['quantity'];
    }
    $supplierQuantityTotals[$supplierId] = $totalQty;
}

// 最终结果:[1 => 3, 2 => 1]

方案2:Laravel Collection 正确分组求和

你之前用Collection得到总数量4,应该是直接对整个集合调用了sum('quantity'),没有按供应商分组后再统计。可以利用已有的分组结构,或者重新从原始数据处理:

方式A:基于现有$quantities数组处理

$supplierQuantityTotals = collect($quantities)
    ->map(function ($productList) {
        // 对每个供应商的产品列表求和
        return collect($productList)->sum('quantity');
    })
    ->toArray();

方式B:直接从$basket->products处理(更简洁)

如果不需要保留原$quantities数组的结构,直接从原始产品集合分组求和会更高效:

$supplierQuantityTotals = collect($basket->products)
    ->groupBy('supplier_id')
    ->map(function ($products) {
        return $products->sum('quantity');
    })
    ->toArray();

方案3:生成数组时同步计算总和

在你生成$quantities数组的循环里,顺便累加每个供应商的quantity,一步到位避免二次遍历:

$quantities = array();
$supplierTotals = array(); // 新增数组存储每个供应商的总数量
$count = 0;

foreach ($basket->products as $product) {
    $supplier = Supplier::find($product->supplier_id);
    
    if($supplier->shipping_cost == 0) {
        $shipping_cost = $delivery_amount;
    } else {
        $shipping_cost = $supplier->shipping_cost;
    }

    $quantities[$supplier->id][] = array (
        'supplier_id' => $supplier->id,
        'child_product_id' => $product->child_product_id,
        'quantity' => $product->quantity,
        'shipping_cost' => $shipping_cost,
    );

    // 同步累加总数量
    if (!isset($supplierTotals[$supplier->id])) {
        $supplierTotals[$supplier->id] = 0;
    }
    $supplierTotals[$supplier->id] += $product->quantity;
}

// $supplierTotals 就是你需要的结果:[1 => 3, 2 => 1]

以上几种方案都能实现按供应商ID维度拆分统计quantity总和,你可以根据自己的代码场景选择最合适的方式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.01 03:02:48