0

我有一个这种格式的 MySQL 数据库:

表名:btree_mst 字段:id、parent_id、left_node_id、right_node_id、user_name

现在我要做的是以无序列表格式打印它,如下所示

  • 根节点
    • 节点 A
      • 节点 A 左
      • 节点 A 右
    • 节点 B
      • 节点 B 左
      • 节点 B 右

我试图为此创建一个递归函数,但没有按预期工作。有什么建议么 ?

这是我制作的代码,http ://pastebin.com/X15qAKaA 这段代码中唯一的错误是,它每次都打印 UL。它应该仅在级别更改时打印。

提前致谢。

4

1 回答 1

1

如果您的数据库中没有有序列表,则递归是合适的。

class A
{
    private $a = array(
        array(
            'id' => 1,
            'parent_id' => 0,
            'title' => 'ROOT'
        ),
        array(
            'id' => 2,
            'parent_id' => 1,
            'title' => 'A'
        ),
        array(
            'id' => 3,
            'parent_id' => 1,
            'title' => 'B'
        ),
        array(
            'id' => 4,
            'parent_id' => 2,
            'title' => 'A left'
        )
    );//your database values

    public function buildTree()
    {
        $aNodes = array();
        $iRootId = 1;//your root id
        foreach ($this->a AS $iK => $aV)
        {
            if($aV['id'] == $iRootId)
            {
                unset($this->a[$iK]);
                $aNodes[$aV['id']] = $aV;
                $aNodes[$aV['id']]['childs'] = $this->getChilds($aV['id']);
            }

        }

        print_r($aNodes);//print tree
    }

    private function getChilds($iParentId)
    {
        $aChilds = array();
        foreach ($this->a AS $iK => $aV)
        {
            if($aV['parent_id'] == $iParentId)
            {
                unset($this->a[$iK]);
                $aChilds[$aV['id']] = $aV;
                $aChilds[$aV['id']]['childs'] = $this->getChilds($aV['id']);
            }

        }

        return $aChilds;
    }

}

$o = new A();
$o->buildTree();
于 2012-07-30T07:50:02.000 回答