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

当内部ID存在时为键添加值:订单与产品数据合并问题

拆分订单与产品数据到独立对象的实现方案

嘿,看你已经开始从订单数据里提取产品相关信息了,这段代码已经在收集产品ID、完整产品数组,还计算了单类产品的总价,思路很对!接下来咱们把订单和产品数据分别存入独立的对象/集合,完美适配支付API不能合并的要求:

首先,先看你现有的这段代码:

foreach($transactioninfodecoded->saleData->orderData as $orders){ 
    $totalproductsum = $orders->quantity * $orders->price; 
    $prodids[] = $orders->productId; 
    $productarray[] = $orders; 
}

现在咱们把它扩展成同时填充订单和产品两个独立存储单元的逻辑:

1. 先初始化两个空的存储容器

咱们用数组先存,后续可以按需转成对象:

// 存订单级的汇总数据(比如订单ID、总金额、下单时间这些)
$orderStore = [];
// 存去重后的产品详细数据(避免同一个产品重复存储)
$productStore = [];

2. 遍历订单数据时同时填充两个容器

在循环里,一边处理订单的整体信息,一边整理产品数据:

foreach($transactioninfodecoded->saleData->orderData as $orderItem){ 
    // 你原来的单产品总价计算逻辑保留
    $totalProductSum = $orderItem->quantity * $orderItem->price;

    // --- 填充订单存储 ---
    // 只在第一次循环时初始化订单的基础信息(因为订单级数据是全局的)
    if(empty($orderStore)){
        $orderStore = [
            'order_id' => $transactioninfodecoded->saleData->orderId,
            'total_transaction_amount' => $transactioninfodecoded->saleData->totalAmount,
            'created_at' => $transactioninfodecoded->saleData->createTime,
            'total_items_quantity' => 0 // 用来累加所有产品的总数量
            // 这里可以加其他订单级的字段,比如支付状态、买家信息等
        ];
    }
    // 累加订单内的产品总数量
    $orderStore['total_items_quantity'] += $orderItem->quantity;

    // --- 填充产品存储(做去重处理) ---
    $prodId = $orderItem->productId;
    // 如果这个产品还没存过,就新增一条
    if(!isset($productStore[$prodId])){
        $productStore[$prodId] = [
            'product_id' => $prodId,
            'product_name' => $orderItem->productName,
            'unit_price' => $orderItem->price,
            'sold_quantity' => $orderItem->quantity
            // 其他产品字段比如描述、分类等,按需添加
        ];
    } else {
        // 如果产品已经存在,就累加销量
        $productStore[$prodId]['sold_quantity'] += $orderItem->quantity;
    }
}

3. 按需转成对象格式

如果后续业务需要用对象而不是数组,直接强制转换就行:

// 把订单数组转成对象
$orderObject = (object)$orderStore;
// 把每个产品数组都转成对象
$productObjects = array_map(function($product){
    return (object)$product;
}, $productStore);

这样处理完,$orderObject里就是完整的订单汇总数据,$productObjects是去重后的产品数据集合,完全符合支付API要求的分离存储需求啦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:21:50