我有一个采用这种格式的 MySQL 数据库:
表名称:btree_mst 字段:id、parent_id、left_node_id、right_node_id、user_name
现在我要做的是以无序列表格式打印它,如下所示
- 根节点
- 节点A
- 节点A左
- 节点A右
- 节点 B
- 节点 B 左侧
- 节点 B 右
- 节点A
我尝试为此创建一个递归函数,但没有按预期工作。 有什么建议吗?
这是我编写的代码,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/