本文实例讲述了PHP实现无限极分类生成分类树的方法。分享给大家供大家参考,具体如下:
现在的分类数据库设计基本都是:每一个分类有一个id主键字段,一个pid指向父类的id,这样便可实现无限级分类,取出的数据就是如下的格式:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
$arr = array ( array ( "id" => 1 , "pid" => 0 , 'cat' => '栏目一' ), array ( "id" => 2 , "pid" => 0 , 'cat' => '栏目二' ), array ( "id" => 3 , "pid" => 1 , 'cat' => '栏目三' ), array ( "id" => 4 , "pid" => 2 , 'cat' => '栏目四' ), array ( "id" => 5 , "pid" => 1 , 'cat' => '栏目五' ), array ( "id" => 6 , "pid" => 5 , 'cat' => '栏目六' ), array ( "id" => 7 , "pid" => 5 , 'cat' => '栏目七' ), array ( "id" => 8 , "pid" => 6 , 'cat' => '栏目八' ), array ( "id" => 9 , "pid" => 1 , 'cat' => '栏目九' ), array ( "id" => 10 , "pid" => 0 , 'cat' => '栏目十' ), array ( "id" => 11 , "pid" => 10 , 'cat' => '栏目十一' ), array ( "id" => 12 , "pid" => 11 , 'cat' => '栏目十二' ), array ( "id" => 13 , "pid" => 2 , 'cat' => '栏目十三' ), array ( "id" => 14, "pid" => 13 , 'cat' => '栏目十四' ) ); |
不多说,直接上处理代码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
//生成无限极分类树 function make_tree( $arr ){ $refer = array (); $tree = array (); foreach ( $arr as $k => $v ){ $refer [ $v [ 'id' ]] = & $arr [ $k ]; //创建主键的数组引用 } foreach ( $arr as $k => $v ){ $pid = $v [ 'pid' ]; //获取当前分类的父级id if ( $pid == 0){ $tree [] = & $arr [ $k ]; //顶级栏目 } else { if (isset( $refer [ $pid ])){ $refer [ $pid ][ 'subcat' ][] = & $arr [ $k ]; //如果存在父级栏目,则添加进父级栏目的子栏目数组中 } } } return $tree ; } |
测试运行:
1
2
|
$cat = make_tree( $arr ); print_r( $cat ); |
运行结果:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
Array ( [0] => Array ( [id] => 1 [pid] => 0 [cat] => 栏目一 [subcat] => Array ( [0] => Array ( [id] => 3 [pid] => 1 [cat] => 栏目三 ) [1] => Array ( [id] => 5 [pid] => 1 [cat] => 栏目五 [subcat] => Array ( [0] => Array ( [id] => 6 [pid] => 5 [cat] => 栏目六 [subcat] => Array ( [0] => Array ( [id] => 8 [pid] => 6 [cat] => 栏目八 ) ) ) [1] => Array ( [id] => 7 [pid] => 5 [cat] => 栏目七 ) ) ) [2] => Array ( [id] => 9 [pid] => 1 [cat] => 栏目九 ) ) ) [1] => Array ( [id] => 2 [pid] => 0 [cat] => 栏目二 [subcat] => Array ( [0] => Array ( [id] => 4 [pid] => 2 [cat] => 栏目四 ) [1] => Array ( [id] => 13 [pid] => 2 [cat] => 栏目十三 [subcat] => Array ( [0] => Array ( [id] => 14 [pid] => 13 [cat] => 栏目十四 ) ) ) ) ) [2] => Array ( [id] => 10 [pid] => 0 [cat] => 栏目十 [subcat] => Array ( [0] => Array ( [id] => 11 [pid] => 10 [cat] => 栏目十一 [subcat] => Array ( [0] => Array ( [id] => 12 [pid] => 11 [cat] => 栏目十二 ) ) ) ) ) ) |
如果大家需要这样的组装格式,或者需要该格式方便后续的处理,可以尝试此方法
希望本文所述对大家PHP程序设计有所帮助。
原文链接:http://blog.csdn.net/zhang197093/article/details/49962541