【问题标题】:PHP find parents of leaf and build treePHP找到叶子的父母并构建树
【发布时间】:2014-10-04 10:45:43
【问题描述】:

我有一个非常简单的任务,但我在某个地方迷路了。我有具有通用结构的类别表: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;
}

我搜索了线程并发现了一些与我类似的问题,但解决方案不适用于我的情况。

任何帮助将不胜感激。

【问题讨论】:

    标签: php arrays multidimensional-array tree


    【解决方案1】:

    您最好使用一个函数来查找给定 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;
    }
    

    【讨论】:

    • 这正是我要找的!我刚刚添加了if(!empty($subChildren)) 语句以防止每个元素中出现空子数组。再次感谢!
    猜你喜欢
    • 2015-03-02
    • 1970-01-01
    • 2014-05-10
    • 1970-01-01
    • 2013-01-19
    • 2012-08-29
    • 1970-01-01
    • 1970-01-01
    • 2019-12-27
    相关资源
    最近更新 更多