2017-10-05 61 views
0

我需要以json格式顯示類別及其子類別,這裏問題是每個類別都有無限級別,有些類別有4個級別和2個和3個級別。我試過一種解決方案,它只顯示一個級別,但我需要顯示所有級別。類別以json格式使用php和mysql的多級顯示器

表模式: enter image description here

代碼示例:

function categories() { 
     header('Content-Type: application/json'); 
     $sql = "select id,name,parent_id from categories where parent_id = 0"; 
     $q = $this->db->conn_id->prepare($sql); 
     $q->execute(); 
     $main_cat = array(); 
     while ($row = $q->fetch(PDO::FETCH_ASSOC)) { 
      $sql2 = "select id,name,parent_id from categories where parent_id = ?"; 
      $sub_cat = array(); 
      $r = $this->db->conn_id->prepare($sql2); 
      $r->bindParam(1, $row['id']); 
      $r->execute(); 
      while ($row1 = $r->fetch(PDO::FETCH_ASSOC)) { 
       array_push($sub_cat, array_filter($row1)); 
      } 
      $row['subcategories'] = $sub_cat; 
      array_push($main_cat, array_filter($row)); 
     } 
     echo json_encode(array("categories" => $main_cat)); 
    } 

上面的代碼JSON響應示例:

{"categories":[{"id":"1","name":"Development","subcategories":[{"id":"2","name":"All Development","parent_id":"1"},{"id":"3","name":"Web Development","parent_id":"1"},{"id":"12","name":"Mobile Apps","parent_id":"1"}]},{"id":"4","name":"Design","subcategories":[{"id":"5","name":"All Design","parent_id":"4"}]},{"id":"11","name":"IT & Software"}]} 

任何一個可以幫助我如何來解決這個問題。

回答

0

我試過這個解決方案適用於我。

function categories() { 
     $sql = "SELECT * FROM categories where parent_id = 0"; 
     $results = $this->db->conn_id->prepare($sql); 
     $results->execute(); 
     while ($result = $results->fetch(PDO::FETCH_ASSOC)) { 
      $subcat = array(); 
      $id = $result['id']; 
      $childs = $this->hasChilds($id); 
      $categories[] = array("id" => $result['id'], "name" => $result['name'], "parent_id" => $result['parent_id'], "subcats" => array_filter($childs)); 
     } 
     echo json_encode($categories); 
    } 

    function hasChilds($id) { 
     $sql = "SELECT * FROM categories where parent_id = ? "; 
     $results = $this->db->conn_id->prepare($sql); 
     $results->bindParam(1, $id); 
     $results->execute(); 
     $count = $results->rowCount(); 
     $array = array(); 
     if ($count > 0) { 
      while ($result = $results->fetch(PDO::FETCH_ASSOC)) { 
       $array[] = array("id" => $result['id'], "name" => $result['name'], "parent_id" => $result['parent_id'], "subcats" => array_filter($this->hasChilds($result['id']))); 
      } 
     } else { 
      $array[] = null; 
     } 
     return $array; 
    }