php中的递归类别树
我有这个sql表 如何用php类返回它php中的递归类别树,php,mysql,recursion,tree,Php,Mysql,Recursion,Tree,我有这个sql表 如何用php类返回它 Root1 - SubCat 1 -- SubSubCat 1 - SubCat 2 Root2 我找到了,但我不能以我需要的形式归还。但脚本仍然显示所有类别,首先显示为子类别,然后显示为根类别 如何制作?这就是工作: $items = array( (object) array('id' => 42, 'sub_id' => 1), (object) array('id' => 43, 'sub_id
Root1
- SubCat 1
-- SubSubCat 1
- SubCat 2
Root2
我找到了,但我不能以我需要的形式归还。但脚本仍然显示所有类别,首先显示为子类别,然后显示为根类别
如何制作?这就是工作:
$items = array(
(object) array('id' => 42, 'sub_id' => 1),
(object) array('id' => 43, 'sub_id' => 42),
(object) array('id' => 1, 'sub_id' => 0),
);
$childs = array();
foreach($items as $item)
$childs[$item->sub_id][] = $item;
foreach($items as $item) if (isset($childs[$item->id]))
$item->childs = $childs[$item->id];
$tree = $childs[0];
print_r($tree);
这是通过首先按父类id索引类别来实现的。然后对于每个类别,我们只需将category->childs设置为childs[category->id],就可以构建树了
现在$tree是类别树。它包含一个sub_id=0的项数组,其本身包含其子项的数组,其本身
打印输出($tree):
这是最后一个函数:
function buildTree($items) {
$childs = array();
foreach($items as $item)
$childs[$item->sub_id][] = $item;
foreach($items as $item) if (isset($childs[$item->id]))
$item->childs = $childs[$item->id];
return $childs[0];
}
$tree = buildTree($items);
这是您应该在本地而不是在数据库端执行的操作。我不同意您的看法,并说如果您可以在数据库中执行,那么就这样做。至于你的问题,你想要一个使用递归的例子吗?以下答案有效,但不是递归答案。请将您的PhpMyAdmin副本更新至最新版本。
function buildTree($items) {
$childs = array();
foreach($items as $item)
$childs[$item->sub_id][] = $item;
foreach($items as $item) if (isset($childs[$item->id]))
$item->childs = $childs[$item->id];
return $childs[0];
}
$tree = buildTree($items);