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)
我想拥有它,如果有大量的父文件夹,它将能够通过所有这些.我该怎么做呢
为了让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)
| 归档时间: |
|
| 查看次数: |
3307 次 |
| 最近记录: |