不用递归实现无限级分类

简介:
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
<?php
  
/**
  * 此方法由@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  "<pre>" ;
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


相关文章
|
6月前
代码随想录Day16 LeetCode T654 最大二叉树 T617 合并二叉树 T700 二叉搜索树中的搜索
代码随想录Day16 LeetCode T654 最大二叉树 T617 合并二叉树 T700 二叉搜索树中的搜索
29 0
|
6月前
|
算法
代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)
代码随想录 Day11 二叉树 LeetCode T144,145,94 前中后序遍历 (递归解法)
25 0
|
5月前
二叉树相关问题细谈递归(下)
二叉树相关问题细谈递归(下)
32 0
|
5月前
|
存储
二叉树相关问题细谈递归(上)
二叉树相关问题细谈递归
31 0
|
5月前
|
算法
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
代码随想录算法训练营第十七天 | LeetCode 110. 平衡二叉树、257. 二叉树的所有路径、404. 左叶子之和
28 0
|
7月前
|
机器学习/深度学习 存储 算法
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
【数据结构与算法篇】手撕八大排序算法之快排的非递归实现及递归版本优化(三路划分)
54 0
|
8月前
|
Java
java实现树的前序遍历,递归和非递归实现(简单明了)
java实现树的前序遍历,递归和非递归实现(简单明了)
70 0
|
10月前
|
算法 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(下
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
59 0
|
10月前
|
算法 UED 容器
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力(上)
【算法入门&二叉树】从先中后序的遍历到用中后序列构造二叉树|如何抵挡递归法该死的魅力
83 0
|
11月前
|
算法 Python
Python递归树结构,回溯法深度优先、广度优先详解,代码实现
Python递归树结构,回溯法深度优先、广度优先详解,代码实现