Php 将修改的前序树遍历数据获取到数组中
将树数据放入数组的有效方法是什么 我按照命令检索树数据 但是,本教程仅显示如何输出树,而不是如何制作多维数组 我曾经Php 将修改的前序树遍历数据获取到数组中,php,mysql,Php,Mysql,将树数据放入数组的有效方法是什么 我按照命令检索树数据 但是,本教程仅显示如何输出树,而不是如何制作多维数组 我曾经 SELECT title, lft, rgt FROM tree_structure WHERE lft BETWEEN $parentLft AND $parentRgt ORDER BY lft ASC 因此,对于每个项目,我都有它的标题、左值和右值 我一直坚持让阵列看起来像这样 Array ( Title: Main Topic Children => Arr
SELECT title, lft, rgt FROM tree_structure WHERE lft BETWEEN $parentLft AND $parentRgt ORDER BY lft ASC
因此,对于每个项目,我都有它的标题、左值和右值
我一直坚持让阵列看起来像这样
Array
(
Title: Main Topic
Children => Array
(
=> Title: subTopic
Leaf: true
=> Title: Another subtopic
Children => Array
(
=> Title: subtopic child
Leaf: true
)
)
)
如果你能帮忙,我将非常感激
另外,sql输出看起来(除了我有标题,没有名字,也没有使用category_id):
试试这个密码$结果是数据库结果$tree是您要返回的阵列
function create_tree ($results) {
$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);
函数创建树($results){
$return=$results[0];
数组移位($results);
如果($return['lft']+1==$return['rgt'])
$return['leaf']=true;
否则{
foreach($results作为$key=>$result){
if($result['lft']>$return['rgt'])//不是子级
打破
if($rgt>$result['lft'])//不是顶级子级
继续;
$return['children'][]=创建_树(数组_值($results));
foreach($child\u key=>$child的结果){
如果($child['rgt']<$result['rgt']))
未设置($results[$child_key]);
}
$rgt=$result['rgt'];
未设置($results[$key]);
}
}
未设置($return['lft',$return['rgt');
return$return;
}
$tree=创建树($results);
我首先将SQL查询重写为:
SELECT title, (SELECT TOP 1 title
FROM tree t2
WHERE t2.lft < t1.lft AND t2.rgt > t1.rgt
ORDER BY t2.rgt-t1.rgt ASC) AS parent
FROM tree t1
ORDER BY rgt-lft DESC
这样做就容易多了。使用create_树,我在这一点上遇到了一个错误:
if ($rgt > $result['lft']) //not a top-level child continue;
它返回的错误是:未定义变量:rgt
而且它没有返回正确的数组数。。。。。
我在中使用相同的数据库结构
该查询的记录是什么样子的?@Gumbo,我使用另一篇文章中的数据作为示例。最重要的是,该算法使用左、右值来排序数据。谢谢你的帮助,但它生成的数组不正确。一旦我发现这个问题,我将尝试发布输出。数组返回此函数不正确,有些行重复。这很有效,非常感谢。起初,我有一个diff查询,结果不好,但当我修复了这个查询后,它成功了。谢谢谢谢你发布这个。我一直在寻找一个SQL脚本来添加一个特定的祖先ID(在我的例子中不是父ID),使用您的代码作为起点很容易解决这个问题。
title | parent
----------------------------------------------
ELECTRONICS | NULL
PORTABLE ELECTRONICS | ELECTRONICS
TELEVISIONS | ELECTRONICS
MP3 PLAYERS | PORTABLE ELECTRONICS
FLASH | MP3 PLAYERS
CD PLAYERS | PORTABLE ELECTRONICS
2 WAY RADIOS | PORTABLE ELECTRONICS
TUBE | TELEVISIONS
LCD | TELEVISIONS
PLASMA | TELEVISIONS
if ($rgt > $result['lft']) //not a top-level child continue;