理解PHP/mysql中的递归

num*_*l25 2 php mysql recursion

我试图在php/mysql中创建和理解递归

我的数据库看起来如下所示

id | woid | parent | name
-------------------------------
1  | 1111 | 0      | pdf
2  | 1111 | 0      | docs
3  | 2222 | 0      | pdf
4  | 2222 | 0      | docs
5  | 3333 | 0      | pdf
6  | 1111 | 2      | folder1
7  | 2222 | 4      | folder3
8  | 3333 | 5      | folder
Run Code Online (Sandbox Code Playgroud)

我想拥有它,如果有大量的父文件夹,它将能够通过所有这些.我该怎么做呢

Mic*_*nan 6

为了让SQL返回一个更像树状结构实际上是非常困难的.相反,使用PHP重新组织SQL结果可能更有意义(并且您对输出有更多控制).

SELECT id, woid, parent, name FROM files ORDER by parent ASC;
Run Code Online (Sandbox Code Playgroud)

这将为我们带来一切.然后我们遍历结果集,将结果存储到由父键控的数组中.

$folders = array();
foreach ($resultset AS $row) {
    $row['id'] = (int)$row['id'];
    $row['parent'] = (int)$row['parent'];
    if (!$folders[$row['parent']]) $folders[$row['parent']] = array();
    $folders[$row['parent']][] = $row;
}
Run Code Online (Sandbox Code Playgroud)

然后我们可以递归输出这个数组:

function buildTree($inputArray, $parent = 0) {
    $return = array();
    foreach ($inputArray[$parent] AS $key => $row) {
        if ($inputArray[$row['id']]) {
            $row['children'] = buildTree($inputArray, $row['id']);
        }
        $return[] = $row;
    }
    return $return;
}

$myStuff = buildTree($folders);
Run Code Online (Sandbox Code Playgroud)