在php中编码嵌套JSON数组

在php中编码嵌套JSON数组,php,arrays,json,Php,Arrays,Json,我想发送嵌套的JSON数组。它包含以下格式 ${"posts":[{ "abc":"123", "xyz":"123", "pro":[{ "name":"Brinjal", "qty":"500 gms" }, { "name":"Brinjal", "qty":"500 gms" }] }] } 以下是我的php代码: $rows = $stmt->fetchAll();

我想发送嵌套的JSON数组。它包含以下格式

${"posts":[{
    "abc":"123",
    "xyz":"123",
    "pro":[{
        "name":"Brinjal",
        "qty":"500 gms"
    },
    {
        "name":"Brinjal",
        "qty":"500 gms"
    }] 
}]
}
以下是我的php代码:

$rows = $stmt->fetchAll();
if ($rows) {
     $order["posts"]   = array();
    foreach ($rows as $row) {
        $post = array();
        $post["order_id"] =  $row["order_id"];
        $post["order_totalamount"] = $row["order_totalamount"];
        $post["address"] = $row["address"];
        $post["pincode"] = $row["pincode"];
        $post["delivery_timeslot"] = $row["delivery_timeslot"];
        $post["order_date"] = $row["order_date"];
        $query1= "query";
        $rows1 = $stmt->fetchAll();
        if ($rows1) {
            foreach ($rows1 as $row1) {                             
                $query2= "query";
                $rows2 = $stmt->fetchAll();
                $post["product"]   = array();   
                if ($rows2) {
                    $products = array();
                    foreach ($rows2 as $row2) {
                        $products["product_name"]=$row2["product_name"];
                        $products["prod_qty"] = $row2["product_minquantity"];
                    }
                    array_push($post["product"],$products);
                    echo json_encode($products);
                }

            }
          }
        array_push($order["posts"], $post);
    }  
    echo json_encode($order);   
}
根据上面的代码,我得到了结果:

$ {"posts":
    [{
    "order_id":"18",
    "order_totalamount":"40",
    "address":"2, Chetan Society, Vadodara",
    "pincode":"390023",
    "delivery_timeslot":"Zone wise delivery",
    "order_date":"2016-03-18 17:50:53",
    "product":[{"product_name":"Brinjal","prod_qty":"500 gms"}]
    }]
}
但我的实际产品系列是:

${"product_name":"Banana","prod_qty":"1 Kg"}{"product_name":"Brinjal","prod_qty":"500 gms"}
请帮忙。我被卡住了。尝试了很多,但没有成功。

            foreach ($rows2 as $row2) {
                $products["product_name"]=$row2["product_name"];
                $products["prod_qty"] = $row2["product_minquantity"];
            }
使用最后一个
$row2
的值覆盖
$products[“product\u name”]
$products[“prod\u qty”]

{“产品名称”:“香蕉”、“产品数量”:“1千克”}{“产品名称”:“布林哈尔”、“产品数量”:“500克”}
实际上由两个echo组成:

  • {“产品名称”:“香蕉”,“产品数量”:“1公斤”}
  • {“产品名称”:“布林哈尔”,“产品数量”:“500 gms”}
  • 但你看不出有什么区别。我建议在它们之间回显一个字符串,或者使用类似于
    var\u dump()
    的方法查看回显的值的数量

    你应该这样做:

            for ($i = 0; $i < count($rows2); $i++) {
                $products[$i]["product_name"]=$rows2[$i]["product_name"];
                $products[$i]["prod_qty"] = $rows2[$i]["product_minquantity"];
            }
    

    你的
    $order
    数组的内容是什么?@VitorRigoni:my$order数组内容$post。你能在所需的最小示例中去掉所有不必要的数据库内容和其他东西吗?@UlrichEckhardt:我编辑了我的问题。我仍然无法运行代码来重现问题。如果我也这样做的话。我得到的产品数组为空。不可能,因为您将
    $products
    声明为数组。如果
    $rows2
    也为空,则它可能是空数组。请在for循环和最后的
    $products
    之前,但在for循环内,对
    $rows2
    进行变量转储。我的for循环中确实有一个打字错误
    $rows2
    当然必须是
    $rows2
    ,因为我已经纠正了。下一位投票人是否愿意解释他的投票?我努力帮助他的代码工作。我的答案中的示例很有效,并在要求的地方精确地生成输出。即使OP无法将我的代码复制/粘贴到他的脚本中以使其正常工作,它也肯定有助于将OP推向正确的方向。你的反对票让我在努力解决问题的同时损失了一个代表点。谢谢你的帮助。但我没有成功。实际我想要这样的数组:
    {“posts”:[{“order_id”:“18”,“order_totalamount”:“40”,“address”:“2,Chetan Society,Vadodara”,“pincode”:“390023”,“delivery_timeslot”:“区域交货”,“order_date”:“2016-03-18 17:50:53”,“product”:[{“产品名称”:“香蕉”,“产品数量”:“1公斤”},{“产品名称”:“布林哈尔”,“产品数量”:“500克”}]}
    //Demo $order
    $order = array (
        'posts' => 
        array (
            0 => 
            array (
                'order_id' => '18',
                'order_totalamount' => '40',
                'address' => '2, Chetan Society, Vadodara',
                'pincode' => '390023',
                'delivery_timeslot' => 'Zone wise delivery',
                'order_date' => '2016-03-18 17:50:53',
            ),
        ),
    );
    
    //Demo $rows2
    $rows2 = array(
        array(
            'product_name' => 'banana', 
            'product_minquantity' => '1 Kg'
        ),
        array(
            'product_name' => 'Brinjal', 
            'product_minquantity' => '500 gms'
        )
    );
    
    $post['product'] = array();   
    if ($rows2) {
        $products = array();
        for ($i = 0; $i < count($rows2); $i++) {
            $products[$i]['product_name'] = $rows2[$i]['product_name'];
            $products[$i]['prod_qty']     = $rows2[$i]['product_minquantity'];
        }
        $post['product'] = $products;
        echo json_encode($products); //[{"product_name":"banana","prod_qty":"1 Kg"},{"product_name":"Brinjal","prod_qty":"500 gms"}]
    }
    //$order['posts'][] = $post;
    $order['posts'][0] = $order['posts'][0] + $post;
    //In this example I only have 1 item in $order['posts'] so I know to add to key 0.
    //In your case you need to know which key of $rows1 you need to do the adding.
    //Change the foreach loop of $rows to a for loop as well so you can define your own keynames ($i).
    echo '<br>==================================================================<br>';
    echo json_encode($order);
    /*
        {
        "posts":[
          {
             "order_id":"18",
             "order_totalamount":"40",
             "address":"2, Chetan Society, Vadodara",
             "pincode":"390023",
             "delivery_timeslot":"Zone wise delivery",
             "order_date":"2016-03-18 17:50:53",
             "product":[
                {
                   "product_name":"banana",
                   "prod_qty":"1 Kg"
                },
                {
                   "product_name":"Brinjal",
                   "prod_qty":"500 gms"
                }
             ]
          }
       ]
    }
    */