2017-04-22 91 views
0

我需要生成從PHP循環以下JSON和SQL數據庫,但我有麻煩:從PHP SQL循環生成JSON陣列

[ 
     { 
     "ItemName": "Websites1", 
     "Websites1": [ 
      { 
      "0": "1", 
      "ID": "1", 
      "1": "Essential", 
      "WebsiteName": "Essential 1", 
      "2": "EI", 
      "WebsiteCode": "EI" 
      }, 
      { 
      "0": "2", 
      "ID": "2", 
      "1": "Icon Ibiza", 
      "WebsiteName": "Icon 1", 
      "2": "IC", 
      "WebsiteCode": "IC" 
      }, 
      { 
      "0": "3", 
      "ID": "3", 
      "1": "So Ibiza", 
      "WebsiteName": "So 1", 
      "2": "SO", 
      "WebsiteCode": "SO" 
      } 
     ] 
     }, 
     { 
     "ItemName": "Websites2", 
     "Websites2": [ 
      { 
      "0": "1", 
      "ID": "1", 
      "1": "Essential Ibiza", 
      "WebsiteName": "Essential 2", 
      "2": "EI", 
      "WebsiteCode": "EI" 
      }, 
      { 
      "0": "2", 
      "ID": "2", 
      "1": "Icon Ibiza", 
      "WebsiteName": "Icon 2", 
      "2": "IC", 
      "WebsiteCode": "IC" 
      }, 
      { 
      "0": "3", 
      "ID": "3", 
      "1": "So Ibiza", 
      "WebsiteName": "So 2", 
      "2": "SO", 
      "WebsiteCode": "SO" 
      } 
     ] 
     } 
    ] 

我從數據庫中返回到PHP的相關數據好,但我無法弄清楚如何使用PHP循環生成相關的鍵值對和嵌套。我到目前爲止的代碼是:

  $this->db->sql = "SELECT ID AS ID, WebsiteName AS SelectText, WebsiteCode AS SelectValue FROM Banners_Websites ORDER BY WebsiteName"; 

      $rs = $this->db->query($this->db->sql); 

      if ($this->db->row_count != 0) { 

       $response = array(); 
       $json = array(); 

       while ($row = $this->db->row_read($rs)) { 

        $json["ID"] = $row["ID"]; 
        $json["SelectText"] = $row["SelectText"]; 
        $json["SelectValue"] = $row["SelectValue"]; 

        //$json[] = $row;        
       } 

       $response["Websites1"] = $json; 


      } 


      $rs = $this->db->query($this->db->sql); 

      if ($this->db->row_count != 0) { 

       $json2 = array(); 

       while ($row = $this->db->row_read($rs)) { 

        $json2["ID"] = $row["ID"]; 
        $json2["SelectText"] = $row["SelectText"]; 
        $json2["SelectValue"] = $row["SelectValue"]; 

        //$json[] = $row;        
       } 

       $response["Websites2"] = $json2; 

      } 



      return '[' . json_encode($response) . ']'; 

我明明做的事情非常錯誤的,因爲我只用一行對每個查詢結束。每個循環都會覆蓋鍵值對。嵌套也不正確。對不起,這樣一個愚蠢的問題,但我一直在試圖從網上信息中得出這一點,並卡住了。

謝謝,

中午。

編輯 - 管理本使用Anushil南丹以下但在PHP需要一些額外的調整提供了annswer以獲得所需的格式folows修復:

  // ----------------------------------------------------------------------------------------------- 
      // BANNERMANGEMENTFORM 
      function bannerManagementJson($JsonItem) { 

       $this->db->connect(); 

       $response = array(); 

       //Generate Websites drop-down 
       $SqlStr = "SELECT WebsiteName AS SelectText, WebsiteCode AS SelectValue FROM Banners_Websites ORDER BY WebsiteName"; 
       $response[] = $this->retrieveFormElementJson($SqlStr,'Websites',1); 

       //Generate Clients drop-down 
       $SqlStr = "SELECT ClientName AS SelectText, ID AS SelectValue FROM Banners_BannerClients ORDER BY ClientName"; 
       $response[] = $this->retrieveFormElementJson($SqlStr,'Clients',2); 

       return json_encode($response); 

      } 

      // ----------------------------------------------------------------------------------------------- 
      // RETRIEVEFORMELEMENTJSON 
      function retrieveFormElementJson($SqlStr,$ElementName,$SelectListNo) { 

       $this->db->sql = $SqlStr; 

       $rs = $this->db->query($this->db->sql); 

       if ($this->db->row_count != 0) { 

        $json = array(); 

        while ($row = $this->db->row_read($rs)) { 
         $json[] = $row; 
        } 

        $arrayResponse = array("ItemName"=>$ElementName, "SelectList" . $SelectListNo=>$json); 

       } 

       return $arrayResponse; 

      } 
+0

這個註釋行是你需要$ json [] = $ row; – JYoThI

回答

1

你的陣列是被重寫每一個它的輸入時間while

嘗試: $json1[] = array(); $json2[] = array();

 $this->db->sql = "SELECT ID AS ID, WebsiteName AS SelectText, WebsiteCode AS SelectValue FROM Banners_Websites ORDER BY WebsiteName"; 

     $rs = $this->db->query($this->db->sql); 

     if ($this->db->row_count != 0) { 

      $response = array(); 
      $json[] = array(); 

      while ($row = $this->db->row_read($rs)) { 

       $json[]["ID"] = $row["ID"]; 
       $json[]["SelectText"] = $row["SelectText"]; 
       $json[]["SelectValue"] = $row["SelectValue"]; 

       //$json[] = $row;        
      } 

      $response["Websites1"] = $json; 


     } 


     $rs = $this->db->query($this->db->sql); 

     if ($this->db->row_count != 0) { 

      $json2[] = array(); 

      while ($row = $this->db->row_read($rs)) { 

       $json2[]["ID"] = $row["ID"]; 
       $json2[]["SelectText"] = $row["SelectText"]; 
       $json2[]["SelectValue"] = $row["SelectValue"]; 

       //$json[] = $row;        
      } 

      $response["Websites2"] = $json2; 

     } 



     return '[' . json_encode($response) . ']'; 
+1

仍然你的代碼看起來每次都覆蓋$ json [「ID」] = $ row [「ID」]; – JYoThI

+0

基於評論 –

+0

編輯的代碼需要做一些額外的調整,但這讓我在那裏謝謝!我已經添加了額外的調整到我原來的問題 –