繁体   English   中英

了解PHP / mysql中的递归

[英]Understanding Recursion in PHP/mysql

我正在尝试创建和理解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

我想在有大量父文件夹的地方使用它,它将能够遍历所有文件夹。 我该怎么做。

为了使SQL返回更类似树的结构,实际上将非常困难。 相反,使用PHP重新组织SQL结果可能更有意义(而且您将对输出有更多控制)。

SELECT id, woid, parent, name FROM files ORDER by parent ASC;

这将为我们提供一切。 然后,我们遍历结果集,将结果存储到父级键控的数组中。

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

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

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

如果您正在寻找一种有效的方法来查找所有父节点(或超级父节点),给定层次结构中的某个节点,那么您正在进入图论的领域,这会带来很多挑战,尤其是当结构图的表示在单个表中,例如您自己的情况。

查看此资源以获得良好的概述: http : //www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM