无限级网站栏目-获取树形结构函数

jerry thinkphp 2015年11月19日 收藏
如果网站采用了无限级栏目结构,我们可以将网站所有栏目获取出来组成一个树形结构。
时隔一年,我发现这种写法确实很幼稚啊!Onethink的写法很好,建议大家看一下!
思路就是先一次性select查询,然后用一个函数转为树形数组!
--------------------------------------------------------------------------
数据库结构:


函数代码:
  1. //获得指定文章分类的子分类组成的树形结构
    function cateTree($pid=0,$level=0){
        $cate=M('cate');
        $array=array();
        $tmp=$cate->where("pid='%d'",$pid)->select();
        if(is_array($tmp)){
            foreach($tmp as $v){
                $v['level']=$level;
                $array[count($array)]=$v;
                $sub=cateTree($v['id'],$level+1);
                if(is_array($sub))$array=array_merge($array,$sub);
            }
        }
        return $array;
    }
效果[print_r(cateTree(0))]:
  1. Array
  2. (
  3. [0] => Array
  4. (
  5. [id] => 1
  6. [catename] => 测试分类
  7. [pid] => 0
  8. [status] => 0
  9. [level] => 0
  10. )
  11. [1] => Array
  12. (
  13. [id] => 5
  14. [catename] => 二级分类
  15. [pid] => 1
  16. [status] => 0
  17. [level] => 1
  18. )
  19. [2] => Array
  20. (
  21. [id] => 7
  22. [catename] => 三级分类2
  23. [pid] => 5
  24. [status] => 0
  25. [level] => 2
  26. )
  27. [3] => Array
  28. (
  29. [id] => 2
  30. [catename] => 测试分类
  31. [pid] => 0
  32. [status] => 0
  33. [level] => 0
  34. )
  35. [4] => Array
  36. (
  37. [id] => 4
  38. [catename] => 又来测试
  39. [pid] => 0
  40. [status] => 0
  41. [level] => 0
  42. )
  43. [5] => Array
  44. (
  45. [id] => 6
  46. [catename] => 二级分类二
  47. [pid] => 4
  48. [status] => 0
  49. [level] => 1
  50. )
  51. [6] => Array
  52. (
  53. [id] => 8
  54. [catename] => 三级测试
  55. [pid] => 6
  56. [status] => 0
  57. [level] => 2
  58. )
  59. )

其中level表示其层级。
格式化输出效果: