从多维数组创建子类别层次结构

时间:2013-08-01 15:36:57

标签: php mysql tree hierarchy

我的数据库中有这个表(我希望它能正确显示):

+++++++++++++++++++++++++++
| id_child |--| id_parent |
+++++++++++++++++++++++++++
|    5     |--|     2     |
|    6     |--|     2     |
|    7     |--|     4     |
|    8     |--|     4     |
|    9     |--|     5     |
|    10    |--|     5     |
|    11    |--|     9     |
|    12    |--|     9     |
---------------------------

我写了一个php递归函数,它从传递的父元素(在本例中为'2')创建一个多维数组。 所以,如果我放一个print_r,我会得到这个结果:

Array ( [5] => Array ( [9] => Array ( [11] => Array ( ) [12] => Array ( ) ) [10] => Array ( ) ) [6] => Array ( ) )

我如何获得这种类型的结构? (我排除了第一个父母,2)

(2)
-5
--9
----11
----12
--10
-6

感谢。

2 个答案:

答案 0 :(得分:1)

你需要另一个递归函数来迭代你的数组,如下所示:

function printCategories($categories, $level = 1) {                                
    foreach ($categories as $cat => $subCats) {                                    
        echo str_repeat('-', $level) . $cat . "\n";                                
        printCategories($subCats, $level+1);                                       
    }                                                                              
}                                                                                  
printCategories($categories);    

答案 1 :(得分:1)

<?php

function printtree($tree, $level) {
  $prefix=str_repeat('-',$level);
  foreach ($tree as $k=>$v) {
    echo "$prefix$k<br>\n";
    if (is_array($v)) if (sizeof($v)>0) printtree($v,$level+1);
   }
}

$tree=array( 5=>array(9=>array(11=>array(), 12=>array()), 10=>array()), 6=>array());
printtree($tree,1);

?>