[英]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.