如何在 php 中在另一个 json 数组中创建一个 json 数组


How to make an json array inside another json array in php

我正在开发带有json数据的Android应用程序。为此,我使用 php 和 json 制作了 Web 服务。我得到了结果,但它不适合我的应用程序。下面是我的代码:

<?php
require("config.inc.php");
$query= "SELECT * from zone";
try {
$stmt   = $db->prepare($query);
$result = @$stmt->execute($query_params);   
}
catch (PDOException $ex) {
$zone["success"] = 0;
$zone["message"] = "Database Error!";
die(json_encode($zone));
}
$rows = $stmt->fetchAll();
if ($rows) {
$zone["posts"]   = array();
foreach ($rows as $row) {
    $post  = array();
    $post["zone_id"]=$row["zone_id"];
    $post["zone_name"]=$row["zone_name"];
    $post["zone_turn"]=$row["zone_turn"];
    $post["zone_charge"]=$row["zone_charge"];
    $query1= "SELECT * from pincode_master where zone_id=".$row['zone_id']."";
    try {
        $stmt   = $db->prepare($query1);
        $result = @$stmt->execute($query_params);   
    }
    catch (PDOException $ex) {
        $zone["success"] = 0;
        $zone["message"] = "Database Error!";
        die(json_encode($zone));
    }
    $rows1 = $stmt->fetchAll();
    if ($rows1) {
        $zone["posts1"]   = array();
        foreach ($rows1 as $row1) {
            $post1  = array();
            //$post1["zone_id"]=$row1["zone_id"];
            $post1["pincode_number"]=$row1["pincode_number"];
            //echo $post["pincode_number"];
             array_push($zone["posts1"], $post1);
        }
    }
     array_push($zone["posts"], $post,$zone["posts1"]);
    }  
  echo json_encode($zone);
  } else {
  $zone["success"] = 0;
  $zone["message"] = "No Zone asssign for this day!";
  }
 ?>

从上面的代码中,我得到了下面的json数组。它将在一个数组中包含除密码号之外的所有数据,因为我是从另一个表中获取的。

{"posts[{"zone_id":"2","zone_name":"A","zone_turn":"Monday,Thrusday","zone_charge":"15"},[{"pincode_number":"390007"},{"pincode_number":"390016"},{"pincode_number":"390021"},{"pincode_number":"390023"}],{"zone_id":"3","zone_name":"B","zone_turn":"Tuesday,Friday","zone_charge":"15"},[{"pincode_number":"390001"},{"pincode_number":"390004"},{"pincode_number":"390006"},{"pincode_number":"390010"},{"pincode_number":"390018"},{"pincode_number":"390019"},{"pincode_number":"390020"},{"pincode_number":"390022"}],{"zone_id":"7","zone_name":"W","zone_turn":"Saturday,Sunday,Friday","zone_charge":"15"},[{"pincode_number":"390001"},{"pincode_number":"390004"},{"pincode_number":"390006"},{"pincode_number":"390010"},{"pincode_number":"390018"},{"pincode_number":"390019"},{"pincode_number":"390020"},{"pincode_number":"390022"}],{"zone_id":"8","zone_name":"X","zone_turn":"Wednesday,Saturday,Sunday","zone_charge":"15"},[{"pincode_number":"390001"},{"pincode_number":"390004"},{"pincode_number":"390006"},{"pincode_number":"390010"},{"pincode_number":"390018"},{"pincode_number":"390019"},{"pincode_number":"390020"},{"pincode_number":"390022"}]],"posts1":[{"pincode_number":"390001"},{"pincode_number":"390004"},{"pincode_number":"390006"},{"pincode_number":"390010"},{"pincode_number":"390018"},{"pincode_number":"390019"},{"pincode_number":"390020"},{"pincode_number":"390022"}]}

但我想要下面的一个:

{"posts[{"zone_id":"2","zone_name":"A","zone_turn":"Monday,Thrusday","zone_charge":"15","pincode_number":{"390007","390016","390021"}}]}

您不必像这样创建一个新数组,$zone["posts1"] = array();要添加密码,您只需将密码数据附加到您现有的$post数组中即可。

$post  = array();
$post["zone_id"]=$row["zone_id"];
$post["zone_name"]=$row["zone_name"];
$post["zone_turn"]=$row["zone_turn"];
$post["zone_charge"]=$row["zone_charge"];
.
.
.
$rows1 = $stmt->fetchAll();
    if ($rows1) {
        foreach ($rows1 as $row1) {
            $post["pincode_number"][] = $row1["pincode_number"];
        }
    }
    array_push($zone["posts"], $post);
   }  

只需将$post1做成一个多维数组,并在foreach之后和外部array_push。如下所示:

    foreach ($rows1 as $row1) {
        $post1  = array();
        $post1["pincode_number"][] = $row1["pincode_number"];
    }
    array_push($zone["posts1"], $post1);