我有一个这种格式的MySQL数据库:
表名:btree_mst fields:id,parent_id,left_node_id,right_node_id,user_name
现在我要做的就是按照下面的无序列表格式打印
我尝试为此制作一个递归函数,但没有按预期工作。 有什么建议吗?
以下是我制作的代码,http://pastebin.com/X15qAKaA 此代码中唯一的错误是,它每次都打印UL。它应该只在更改级别时打印。
提前致谢。
答案 0 :(得分: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();