查询以选择树的所有分支

巴赫兰:

我有一个这样的类别表

id | title | parent_id
---|-------|------------
1  | cat1  |  null
2  | cat2  |  null
3  | cat3  |  1
4  | cat4  |  1
5  | cat5  |  3
6  | cat6  |  5
7  | cat7  |  6
8  | cat8  |  7

我想知道如何将主要类别及其分支和一列提供给我每棵树的计数分支,例如,对于主要类别cat1这样的事情:

cat1 => cat3 => cat5 => cat6 => cat7 => cat8

谢谢

阿什什加巴语:

从数据库中以数组形式获取所有条目。

select * from categories;
$name = [];
$parent = [];
$children = [];

foreach($categories as $category){
    $name[$category['id']] = $category['name'];
    
    $parent[$category['id']] = $category['parent_id'];

    if(isset($category['parent_id'])){
       $children[$category['parent_id']][] = $category['id'];
    }
}

现在,在$ children [$ category_id]数组中,每个类别都有子级。

每个孩子的父母

将遍历从任何子项打印到根。

$id = `any id`;

while(isset($id)){
   echo $name[$id] . " => ";
   $id = isset(parent[$id] ? parent[$id] : null); 
}

获取任何节点的子代数。

echo sizeof($children[$category_id]);

现在,从父级到子级遍历时,可以有很多选择,因为一个节点可以有多个子级。

我正在编写代码,该代码选择随机子级并遍历下一个级别。

$id = `any id`;

while(isset($id)){
   echo $name[$id] . " => ";
   if(isset($children[$id])){
     $idx = array_rand($children[$id], 1);
     $id = $children[$idx];
   }
   else{
      // This means you've reached the leaf node.
      $id = null;
   }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章