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

如何基于mysqli查询结果创建拆分型数组(Zen Cart环境)

解决方案:拆分订单查询结果为多维数组

你提到的“拆分为两部分的数组”,其实用多维关联数组来实现是最合理的——毕竟订单和商品是一对多的关系,我们可以把订单的基础信息单独存为一个子数组,把所有商品明细存为另一个子数组,这样结构清晰,也符合Zen Cart的开发逻辑。

结合你的代码,我给你整理了完整的实现方案:

完整代码示例

$oID = (int)$oID;
// 补全查询条件,确保只获取目标订单的数据(避免返回所有订单)
$combined = $db->execute("
    SELECT op.orders_id, op.products_model, op.products_name, op.products_quantity, o.customers_name 
    FROM " . TABLE_ORDERS_PRODUCTS . " op 
    LEFT JOIN " . TABLE_ORDERS . " o ON op.orders_id = o.orders_id
    WHERE op.orders_id = " . (int)$oID
");

// 初始化拆分后的多维数组:包含订单信息和商品明细两个部分
$splitOrderData = [
    'order_basic_info' => [], // 存储订单的核心信息(仅一份)
    'order_product_list' => [] // 存储该订单下的所有商品(多条)
];

if (!$combined->EOF) {
    // 提取订单基础信息(因为所有商品行的订单信息重复,取第一行即可)
    $splitOrderData['order_basic_info'] = [
        'orders_id' => $combined->fields['orders_id'],
        'customers_name' => $combined->fields['customers_name']
    ];

    // 遍历所有商品行,填充商品明细数组
    do {
        $splitOrderData['order_product_list'][] = [
            'products_model' => $combined->fields['products_model'],
            'products_name' => $combined->fields['products_name'],
            'products_quantity' => $combined->fields['products_quantity']
        ];
    } while (!$combined->EOF);
}

代码说明

  1. 数组结构解析:
    • $splitOrderData是一个多维数组,包含两个子数组:
      • order_basic_info:只存储一次订单的核心数据(订单ID、客户名),避免重复存储冗余信息
      • order_product_list:是一个索引数组,每个元素都是单个商品的关联数组,存储商品的型号、名称、购买数量
  2. 遍历逻辑:
    • Zen Cart的$db->execute()返回ADODB结果集对象,用do-while循环可以完整遍历所有查询行(包括第一行)
    • 因为订单和商品是一对多关系,查询结果里每一行商品都会附带重复的订单信息,所以我们只需要提取一次订单基础信息即可

可选:拆分为完全独立的两个数组

如果你更倾向于用两个完全独立的数组来存储,逻辑是一样的,代码调整如下:

$oID = (int)$oID;
$combined = $db->execute("
    SELECT op.orders_id, op.products_model, op.products_name, op.products_quantity, o.customers_name 
    FROM " . TABLE_ORDERS_PRODUCTS . " op 
    LEFT JOIN " . TABLE_ORDERS . " o ON op.orders_id = o.orders_id
    WHERE op.orders_id = " . (int)$oID
");

$orderInfo = [];
$productsList = [];

if (!$combined->EOF) {
    $orderInfo = [
        'orders_id' => $combined->fields['orders_id'],
        'customers_name' => $combined->fields['customers_name']
    ];

    do {
        $productsList[] = [
            'products_model' => $combined->fields['products_model'],
            'products_name' => $combined->fields['products_name'],
            'products_quantity' => $combined->fields['products_quantity']
        ];
    } while (!$combined->EOF);
}

这样你就可以根据需求,灵活使用拆分后的数组数据了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.25 08:36:57