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

如何通过数据库循环向PHP多维数组的PickItems子数组添加元素?

解决PHP数组中PickItems子数组的填充问题

完全没问题,我来帮你把这个数组填充的逻辑捋顺,顺便给你优化下代码细节!

首先,你关于array_push的思路是对的,不过其实还有更简洁的写法。我们先把order_items查询后的循环填充部分改对:

// 初始化空的商品数组
$Items = array();

if ($result2 = $mysqli->query("SELECT * FROM order_items WHERE client_id = {$client} AND main_order_id = {$row['platform_order_id']}")) {
    while($row2 = mysqli_fetch_assoc($result2)) {
        // 方法1:直接用数组赋值的方式添加元素(推荐,比array_push更直观)
        $Items[] = array(
            'SKUNumber' => $row2['sku'],
            'Quantity' => $row2['quantity'],
            'Comments' => $row2['comments']
        );

        // 方法2:用array_push也可以,效果完全一样
        // array_push($Items, array(
        //     'SKUNumber' => $row2['sku'],
        //     'Quantity' => $row2['quantity'],
        //     'Comments' => $row2['comments']
        // ));
    }
    // 记得释放结果集,避免资源浪费
    mysqli_free_result($result2);
}

然后是主数组$params里的PickItems字段,你之前的写法array($Items)是多余的——因为$Items本身已经是一个包含多个商品子数组的数组了,直接赋值给PickItems就行:

$params = array(
    'DeliveryCompanyName' => $row['company_name'],
    'DeliveryAddress1' => $row['address1'],
    'DeliveryAddress2' => $row['address2'],
    'DeliveryCity' => $row['city'],
    'DeliveryCounty' => $row['province'],
    'DeliveryPostCode' => $row['postcode'],
    'DeliveryCountry' => $row['country'],
    'DeliveryPhone' => $row['phone'],
    'DeliveryContact' => $row['first_name'] . " " . $row['last_name'],
    'OutboundRef' => $row['order_number'],
    'PickItems' => $Items, // 直接用$Items,不需要再套一层array()
    'BranchID' => '',
    'CustRef' => $row['order_number']
);

额外提醒:SQL注入风险

你当前的查询语句直接拼接了$client和$row['platform_order_id'],这存在SQL注入的风险!建议改用预处理语句来避免这个问题,示例如下:

$Items = array();
// 准备预处理语句(只查询需要的字段,避免冗余)
$stmt = $mysqli->prepare("SELECT sku, quantity, comments FROM order_items WHERE client_id = ? AND main_order_id = ?");
// 绑定参数(假设client和platform_order_id都是整数类型,用'i';如果是字符串类型用's')
$stmt->bind_param("ii", $client, $row['platform_order_id']);
// 执行查询
$stmt->execute();
// 获取结果集
$result2 = $stmt->get_result();

while($row2 = mysqli_fetch_assoc($result2)) {
    $Items[] = array(
        'SKUNumber' => $row2['sku'],
        'Quantity' => $row2['quantity'],
        'Comments' => $row2['comments']
    );
}

// 关闭语句和结果集,释放资源
$stmt->close();
$result2->free();

这样处理后,你的$params['PickItems']就会正确包含所有从order_items表查询到的商品数据啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 10:03:34