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

我有这个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' => 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);