php - 从数据库构建树多维数组

标签 php mysql

如何使用 php 和 mysql 进行无限递归循环来构建特定的数组布局?我已经写出了我的表格、数组布局以及我完成这项工作的尝试。我花了过去几个小时来解决这个问题,但运气不佳。

我正在尝试基于我的数据库构建一个 php 数组,该数组在使用 json_encode 时构建特定布局

我的数据库表如下所示

TABLE `info`         |    TABLE `relations`
+--------+-----------+    +--------+-----------+
| id     | name      +    | id     | parent_id |
+--------+-----------+    +--------+-----------+
| 2p03Me | sue       |    | b5ET7N | 2p03Me    |
| b5ET7N | john      |    | h7S4bk | b5ET7N    |
| h7S4bk | bob       |    | iMz4d7 | 2p03Me    |
| iMz4d7 | sam       |    | ixRpaH | iMz4d7    |
| ixRpaH | teddy     |    | k41BhX | ixRpaH    |
| k41BhX | dan       |    +--------+-----------+ 
+--------+-----------+

生成的数组应如下所示:

Array
(
    [0] => stdClass Object
        (
            [text] => sue
            [nodes] => Array
                (
                    [0] => stdClass Object
                        (
                            [text] => john
                            [nodes] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [text] => bob
                                        )

                                )

                        )

                    [1] => stdClass Object
                        (
                            [text] => teddy
                            [nodes] => Array
                                (
                                    [0] => stdClass Object
                                        (
                                            [text] => dan
                                        )

                                )

                        )

                )

        )
)

我已经尝试过几次,但似乎无法让它发挥作用。我最近一次也是最后一次尝试是

    $tree = category_tree($mysqli, $origSnippet);
    function category_tree($mysqli, $catid, $tree = array()) {
        ?><pre><?php print_r($tree); ?></pre><?php
        $sql = "SELECT * FROM `relations` INNER JOIN `info` ON `relations`.`id`=`info`.`id` WHERE `relations`.`parent_snippet_id`='$catid'";
        $children = $mysqli->query($sql);
        while($child = $children->fetch_assoc()) {
            $tree[] = array('text' => "$child[name]/$child[id]");
            echo "$child[name]/$child[snippet_id]<br/>";
            category_tree($mysqli, $child['id'], $tree);
        }
        return $tree;
    }

如果您能够提供任何帮助,我们将非常感激。

## 我的问题##

如何使用 php 和 mysql 进行无限递归循环来构建特定的数组布局?我已经写出了我的表格、数组布局以及我完成这项工作的尝试。我花了过去几个小时来解决这个问题,但运气不佳。

最佳答案

我通过执行以下操作解决了此问题:

$tree = array();
$node_id = 0;
$origSnippet = "2p03Me"; //THIS IS GOTTEN FROM A SEPERATE FUNCTION BUT WILL BE THE STARTING POINT OF THE LOOP

function hasChildNodes($mysqli, $snippetID) {
    $sql = "SELECT * FROM `relations` INNER JOIN `info` ON `relations`.`id`=`info`.`id` WHERE `relations`.`parent_id`='$snippetID'";
    return $mysqli->query($sql)->num_rows;
}

function buildTree($mysqli, $snippetID, $node_id, &$tree) {
    $sql = "SELECT * FROM `relations` INNER JOIN `info` ON `relations`.`id`=`info`.`id` WHERE `relations`.`parent_id`='$snippetID'";
    $snippets = $mysqli->query($sql);
    while($snippet = $snippets->fetch_assoc()) {
        $tree[$node_id] = Array("text" => $snippet['name']);
        if (hasChildNodes($mysqli, $snippet['id']) >= 1) {
            buildTree($mysqli, $snippet['id'], 0, $tree[$node_id]['nodes']);
        }
        $node_id++;
    }
}

$sql = "SELECT * FROM `info` WHERE `id`='$origSnippet' LIMIT 1";
$origSnippet = $mysqli->query($sql)->fetch_assoc();

$tree[$node_id] = Array("text" => $origSnippet['name']);

if (hasChildNodes($mysqli, $childSnippet) >= 1) {
    buildTree($mysqli, $childSnippet, $node_id, $tree[$node_id]['nodes']);
}

关于php - 从数据库构建树多维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32430678/

相关文章:

php显示类别和子类别

mysql - 使用 mysql 从数据库获取数据时程序没有响应

javascript - 将两个 javascript 合并为一个 foreach

mysql - 删除重复的 SQL,同时忽略键并选择指定列的最大值

mysql - 从 VB.Net 写入 MySQL。 VB使用逗号,但数据库只接受句号

mysql - 什么更好?每 1,000 行有 100 个表,或者每 10,000 行有 10 个表?

mysql - 关于数据库建模

php - 如何在 Openshift 中打开数据库连接?

php - 我的 pdo 语法有什么问题?

php - 数组搜索未按预期工作