php - 如何使用 PHP 从给定的数据库结构打印二叉树?

标签 php mysql database binary-tree

我有一个采用这种格式的 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。它应该仅在级别更改时打印。

提前致谢。

最佳答案

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

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();

关于php - 如何使用 PHP 从给定的数据库结构打印二叉树?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11716692/

相关文章:

php - 从单个表中加入两列

php - 如何在操作数值为NULL时切换到IS运算符?

java - Solr 自动提交和自动优化?

database - PostgreSQL's Repeatable Read Allows Phantom Reads 但是它的文档说不允许

ruby-on-rails - db :migrate in Rails? 之后的 postgreSQL 文件在哪里

sql - 在数据库表中动态添加列的设计模式

javascript - 发送不带 "?"的 GET 变量

PHP类在构造函数中分配属性

php - 关于 querypath 的 2 个基本问题

mysql - Ansible 没有安装最新版本的 Mysql 5.7