简体   繁体   English

了解PHP / mysql中的递归

[英]Understanding Recursion in PHP/mysql

I am trying to create and understand recursion in php/mysql 我正在尝试创建和理解php / mysql中的递归

my database looks something like the following 我的数据库如下所示

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

I would like to have it where if there are tons and tons of parent folders, it will be able to go through all of them. 我想在有大量父文件夹的地方使用它,它将能够遍历所有文件夹。 how do i go about doing this. 我该怎么做。

In order to get SQL to return a more tree-like structure would actually be pretty difficult. 为了使SQL返回更类似树的结构,实际上将非常困难。 Instead, it probably makes more sense (and you'd have a LOT more control over your output) to reorganize the SQL results using PHP. 相反,使用PHP重新组织SQL结果可能更有意义(而且您将对输出有更多控制)。

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

This will get us everything. 这将为我们提供一切。 Then we iterate through the resultset, storing the result into an array keyed by parent. 然后,我们遍历结果集,将结果存储到父级键控的数组中。

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

Then we can output this array recursively: 然后我们可以递归输出此数组:

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

If you are looking for an efficient way to find all parent nodes (or the super parent node), given a node deep down in your hierarchy, you are entering the realm of graph theory, which comes with many own challenges, especially when the structure of your graph is represented in a single table such as in your own case. 如果您正在寻找一种有效的方法来查找所有父节点(或超级父节点),给定层次结构中的某个节点,那么您正在进入图论的领域,这会带来很多挑战,尤其是当结构图的表示在单个表中,例如您自己的情况。

Check out this resource for a good overview: http://www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html 查看此资源以获得良好的概述: http : //www.artfulsoftware.com/mysqlbook/sampler/mysqled1ch20.html

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

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