PHP-树形结构数据转换成php数组,递归和非递归算法

PHP-树形结构数据转换成php数组,递归和非递归算法

泛泛之交 发布于 2017-02-18 字数 410 浏览 1045 回复 1

数据库表结构图

目录结构

获取到全部记录后,如何遍历(递归或非递归)转换成php树形数组,如

array(
"id"=>1,
"name"=>"第一章",
"children"=>array(...)
)

如果你对这篇文章有疑问,欢迎到本站 社区 发帖提问或使用手Q扫描下方二维码加群参与讨论,获取更多帮助。

扫码加入群聊

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

偏爱自由 2017-09-02 1 楼

sql遍历得出所有数据到$results里

SELECT id,title, lft, rgt FROM tablename ORDER BY lft ASC

生成树状数组:

 function create_tree ($results) {$rgt=0;

$return = $results[0];
array_shift($results);

if ($return['lft'] + 1 == $return['rgt'])
$return['leaf'] = true;
else {
foreach ($results as $key => $result) {
if ($result['lft'] > $return['rgt']) //not a child
break;
if ($rgt > $result['lft']) //not a top-level child
continue;
$return['children'][] = create_tree(array_values($results));
foreach ($results as $child_key => $child) {
if ($child['rgt'] < $result['rgt'])
unset($results[$child_key]);
}
$rgt = $result['rgt'];
unset($results[$key]);
}
}

unset($return['lft'],$return['rgt']);
return $return;

}
$tree = create_tree($results);