我有一个非常简单的任务,但我失去了某个地方。我有具有共同结构的类别表:id,id_parent,其他一些不太重要的字段。我需要构建从父节点到子节点的多维数组,如下所示:
array(
'id' => 1,
'id_parent' => 0,
'name' => 'Main',
'children' => array(
'id' => 2,
'id_parent' => 1,
'name' => 'Main-sub',
'children' => array(
'id' => 3,
'id_parent' => 2,
'name' => 'Main-sub-sub'
)
)
)
我已经给出了类别ID(例如id = 3)。我需要找到此类别的第一个父级,然后构建遍历的树。我尝试使用if语句递归的最简单的方法,但我得到的数组的顺序是相反的。这就是现在的样子:
public function getCategoryById($id)
{
$branch = array();
$data = $this -> db -> query("SELECT categories.* FROM categories WHERE categories.visible = 1 AND categories.id = {$id} ORDER BY categories.position -- LIMIT 1");
if(is_array($data))
{
foreach($data as $item)
{
if($item['id_parent'] != 0)
{
// do it again recursively
$parent = $this -> getCategoryById($item['id_parent']);
$branch['parents'] = $parent;
// lost here
}
// lost here also
$branch[] = $item;
}
}
return $branch;
}
我搜索了线程,发现了几个类似于我的问题,但解决方案在我的情况下不起作用。
任何帮助将不胜感激。
答案 0 :(得分:0)
您最好使用一个函数来查找给定ID的类别的所有子项并返回您要查找的结构。
public function getChildrenForCategory($id)
{
$children = array();
$data = $this -> db -> query("SELECT categories.* FROM categories WHERE categories.visible = 1 AND categories.id_parent = {$id} ORDER BY categories.position");
if(is_array($data))
{
foreach($data as $item)
{
// do it again recursively
$subChildren = $this -> getChildrenForCategory($item['id']);
$item['children'] = $subChildren;
array_push($children, $item);
}
}
return $children;
}