2014-11-06 149 views
0

我想创建一个嵌套的JSON对象和组我通过id_hotel如何在php中使用嵌套对象创建响应json?

enter image description here

我的实际JSON响应

{ 
    "tag": "cities", 
    "success": 1, 
    "error": 0, 
    "items": 2, 
    "item": [ 
     { 
      "id": "6194", 
      "year": "2013", 
      "city": "London", 
      "start": "1", 
      "id_hotel": "20001", 
      "name": "hotel piccadilly", 
      "address": "road 4", 
      "number_fr": "7003", 
      "district": "london city", 
      "pr": "GB", 
      "fres": "1", 
      "mode": "Night", 
      "pos": "402", 
      "pes": "33", 
      "pis": "21", 
      "pus": "456" 
     }, 
     { 
      "id": "6194", 
      "year": "2013", 
      "city": "London", 
      "start": "1", 
      "id_hotel": "20001", 
      "name": "hotel piccadilly", 
      "address": "road 4", 
      "number_fr": "7003", 
      "district": "london city", 
      "pr": "GB", 
      "fres": "1", 
      "mode": "Day", 
      "pos": "0", 
      "pes": "1", 
      "pis": "0", 
      "pus": "1" 
     } 
    ] 
} 

我的PHP代码,编码响应

 $query = "SELECT * FROM cities WHERE city = 'London'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    // check for empty result 
    if (mysql_num_rows($result) > 0) { 

     $response["item"] = array(); 

     while ($row = mysql_fetch_array($result)) { 
      // temp user array 
      $product = array(); 
      $product["id"] = $row["id"]; 
      $product["year"] = $row["year"]; 
      $product["city"] = $row["city"]; 
      $product["start"] = $row["start"]; 
      $product["id_hotel"] = $row["id_hotel"]; 
      $product["name"] = $row["name"]; 
      $product["address"] = $row["address"]; 
      $product["number_fr"] = $row["number_fr"]; 
      $product["district"] = $row["district"]; 
      $product["pr"] = $row["pr"]; 
      $product["fres"] = $row["fres"]; 
      $product["mode"] = $row["mode"]; 
      $product["pos"] = $row["pos"]; 
      $product["pes"] = $row["pes"]; 
      $product["pis"] = $row["pis"]; 
      $product["pus"] = $row["pus"];    

      // push single product into final response array 
      array_push($response["item"], $product); 
     } 
     // success 
     $response["items"] = mysql_num_rows($result); 
     $response["success"] = 1; 

     // echoing JSON response 
     echo json_encode($response); 
实际结果的JSON响应

什么我desider

{ 
"tag": "cities", 
"success": 1, 
"error": 0, 
"items": 2, 
"item": [ 
    { 
     "id": "6194", 
     "year": "2013", 
     "city": "London", 
     "start": "1", 
     "id_hotel": "20001", 
     "name": "hotel piccadilly", 
     "address": "road 4", 
     "number_fr": "7003", 
     "district": "london city", 
     "pr": "GB", 
     "fres": "1", 
     "mode": [{ 
     "value" : "Night", 
     "pos": "402", 
     "pes": "33", 
     "pis": "21", 
     "pus": "456" 
     }, 
     { "value" : "Day", 
     "pos": "0", 
     "pes": "1", 
     "pis": "0", 
     "pus": "1" 
     }] 

    } 
] 
} 

在此先感谢您的关注!

+0

我解决了我的问题。我创建了嵌套查询。 – Patrizio 2014-11-07 10:57:50

+0

您应该始终发布您的答案,以便其他用户可以从中受益。 – 2016-09-19 05:41:14

回答

0

月1日,我建议你一个小的变化,以节省您的一些线路,因此,我添加一些代码来实现你想要

$query = "SELECT * FROM cities WHERE city = 'London'"; 
    $result = mysql_query($query) or die(mysql_error()); 
    // check for empty result 
    if (mysql_num_rows($result) > 0) { 

     $response["item"] = array(); 

     $current_id = NULL; 

     while ($row = mysql_fetch_array($result)) { 
      if ($row->id_hotel !== $current_id){ 
       $response["item"][] = $row; 
       $response["item"]["mode"] = array(); 
      } 
      $current_item = end($response["item"]); 
      $current_item["mode"][] = array("value"=>$row->value, "pes"=>$row->pes); 
      $current_id = $row->id_hotel; 
     } 
     // success 
     $response["items"] = mysql_num_rows($result); 
     $response["success"] = 1; 

     // echoing JSON response 
     echo json_encode($response); 

让我知道,如果它的工作原理是什么。

注意:为了测试目的,只使用了1个变量,并且没有取消设置模式数组的变量,但应该足以查看主要思想是否有效。感觉有点懒:P