簡體   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