当内部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
相关产品推荐
相关产品推荐

