不用递归实现无限级分类

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
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
  
/**
  * 此方法由@Tonton 提供
  * http://my.oschina.net/u/918697
  * @date 2012-12-12 
  */
function  genTree5( $items ) { 
     foreach  ( $items  as  $item
         $items [ $item [ 'pid' ]][ 'son' ][ $item [ 'id' ]] = & $items [ $item [ 'id' ]]; 
     return  isset( $items [0][ 'son' ]) ?  $items [0][ 'son' ] :  array (); 
  
/**
  * 将数据格式化成树形结构
  * @author Xuefen.Tong
  * @param array $items
  * @return array 
  */
function  genTree9( $items ) {
     $tree  array ();  //格式化好的树
     foreach  ( $items  as  $item )
         if  (isset( $items [ $item [ 'pid' ]]))
             $items [ $item [ 'pid' ]][ 'son' ][] = & $items [ $item [ 'id' ]];
         else
             $tree [] = & $items [ $item [ 'id' ]];
     return  $tree ;
}
  
$items  array (
     1 =>  array ( 'id'  => 1,  'pid'  => 0,  'name'  =>  '江西省' ),
     2 =>  array ( 'id'  => 2,  'pid'  => 0,  'name'  =>  '黑龙江省' ),
     3 =>  array ( 'id'  => 3,  'pid'  => 1,  'name'  =>  '南昌市' ),
     4 =>  array ( 'id'  => 4,  'pid'  => 2,  'name'  =>  '哈尔滨市' ),
     5 =>  array ( 'id'  => 5,  'pid'  => 2,  'name'  =>  '鸡西市' ),
     6 =>  array ( 'id'  => 6,  'pid'  => 4,  'name'  =>  '香坊区' ),
     7 =>  array ( 'id'  => 7,  'pid'  => 4,  'name'  =>  '南岗区' ),
     8 =>  array ( 'id'  => 8,  'pid'  => 6,  'name'  =>  '和兴路' ),
     9 =>  array ( 'id'  => 9,  'pid'  => 7,  'name'  =>  '西大直街' ),
     10 =>  array ( 'id'  => 10,  'pid'  => 8,  'name'  =>  '东北林业大学' ),
     11 =>  array ( 'id'  => 11,  'pid'  => 9,  'name'  =>  '哈尔滨工业大学' ),
     12 =>  array ( 'id'  => 12,  'pid'  => 8,  'name'  =>  '哈尔滨师范大学' ),
     13 =>  array ( 'id'  => 13,  'pid'  => 1,  'name'  =>  '赣州市' ),
     14 =>  array ( 'id'  => 14,  'pid'  => 13,  'name'  =>  '赣县' ),
     15 =>  array ( 'id'  => 15,  'pid'  => 13,  'name'  =>  '于都县' ),
     16 =>  array ( 'id'  => 16,  'pid'  => 14,  'name'  =>  '茅店镇' ),
     17 =>  array ( 'id'  => 17,  'pid'  => 14,  'name'  =>  '大田乡' ),
     18 =>  array ( 'id'  => 18,  'pid'  => 16,  'name'  =>  '义源村' ),
     19 =>  array ( 'id'  => 19,  'pid'  => 16,  'name'  =>  '上坝村' ),
);
echo  "
" 
           ; 
          
print_r(genTree5( $items ));
print_r(genTree9( $items ));
  
//后者输出格式,前者类似,只是数组键值不一样,不过不影响数据结构
/*
Array
(
[0] => Array
     (
         [id] => 1
         [pid] => 0
         [name] => 江西省
         [son] => Array
             (
                 [0] => Array
                     (
                         [id] => 3
                         [pid] => 1
                         [name] => 南昌市
                     )
  
                 [1] => Array
                     (
                         [id] => 13
                         [pid] => 1
                         [name] => 赣州市
                         [son] => Array
                             (
                                 [0] => Array
                                     (
                                         [id] => 14
                                         [pid] => 13
                                         [name] => 赣县
                                         [son] => Array
                                             (
                                             [0] => Array
                                                 (
                                                     [id] => 16
                                                     [pid] => 14
                                                     [name] => 茅店镇
                                                     [son] => Array
                                                         (
                                                         [0] => Array
                                                             (
                                                             [id] => 18
                                                             [pid] => 16
                                                             [name] => 义源村
                                                             )
  
                                                         [1] => Array
                                                             (
                                                             [id] => 19
                                                             [pid] => 16
                                                             [name] => 上坝村
                                                             )
  
                                                         )
  
                                                 )
  
                                             [1] => Array
                                                 (
                                                     [id] => 17
                                                     [pid] => 14
                                                     [name] => 大田乡
                                                 )
  
                                             )
  
                                     )
  
                                 [1] => Array
                                     (
                                         [id] => 15
                                         [pid] => 13
                                         [name] => 于都县
                                     )
  
                             )
  
                     )
  
             )
  
     )
  
[1] => Array
     (
         [id] => 2
         [pid] => 0
         [name] => 黑龙江省
         [son] => Array
             (
                 [0] => Array
                     (
                         [id] => 4
                         [pid] => 2
                         [name] => 哈尔滨市
                         [son] => Array
                             (
                             [0] => Array
                                 (
                                     [id] => 6
                                     [pid] => 4
                                     [name] => 香坊区
                                     [son] => Array
                                         (
                                         [0] => Array
                                             (
                                                 [id] => 8
                                                 [pid] => 6
                                                 [name] => 和兴路
                                                 [son] => Array
                                                     (
                                                         [0] => Array
                                                             (
                                                             [id] => 10
                                                             [pid] => 8
                                                             [name] => 
                                                              东北林业大学
                                                             )
  
                                                         [1] => Array
                                                             (
                                                             [id] => 12
                                                             [pid] => 8
                                                             [name] => 
                                                             哈尔滨师范大学
                                                             )
  
                                                     )
  
                                             )
  
                                         )
  
                                 )
  
                             [1] => Array
                                 (
                                     [id] => 7
                                     [pid] => 4
                                     [name] => 南岗区
                                     [son] => Array
                                         (
                                         [0] => Array
                                             (
                                             [id] => 9
                                             [pid] => 7
                                             [name] => 西大直街
                                             [son] => Array
                                                 (
                                                 [0] => Array
                                                     (
                                                     [id] => 11
                                                     [pid] => 9
                                                     [name] => 
                                                      哈尔滨工业大学
                                                     )
  
                                                 )
  
                                             )
  
                                         )
  
                                 )
  
                             )
  
                     )
  
                 [1] => Array
                     (
                         [id] => 5
                         [pid] => 2
                         [name] => 鸡西市
                     )
  
             )
  
     )
)*/



本文转自 IT阿飞 51CTO博客,原文链接:http://blog.51cto.com/itafei/1873332


你可能感兴趣的:(不用递归实现无限级分类)