php - 使用php和mysql以json格式进行分类多级显示

标签 php mysql

我需要以json格式显示类别及其子类别,这里的问题是每个类别都有无限的级别,有些类别有4个级别,有些有2个和有些3个级别。我尝试了一种解决方案,它只显示一个级别下的一个,但我需要显示所有级别。

表架构: 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"}]}

任何人都可以帮助我解决这个问题。

最佳答案

我已经尝试过这个解决方案对我有用。

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;
    }

关于php - 使用php和mysql以json格式进行分类多级显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46578585/

相关文章:

mysql - 具有相同结果的两个 SQL 查询,但一个查询快一个数量级

php - PHP Yii 框架可以连接到 parse.com 吗?

mysql - 另一个提交副本的字段总和?

php - 优化缓慢的 MySQL 查询

php - 如何合并两个数组,但在日期常见的地方合并它们

php - 优化mysql查询以使用空间索引选择多边形中的所有点

php - 从mysql表中获取多个关联行

php - MVC 模型关系 : how to avoid multiple instances of models?

php - 连接 3 个表并使用 WHERE

php - Paypal Express Checkout - 无账户支付