php生成树形(无递归)

001 <?php
002  
003 /**
004  * 此方法由@Tonton 提供
005  * http://my.oschina.net/u/918697
006  * @date 2012-12-12
007  */
008 function genTree5($items) {
009     foreach ($items as $item)
010         $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];
011     return isset($items[0]['son']) ? $items[0]['son'] : array();
012 }
013  
014 /**
015  * 将数据格式化成树形结构
016  * @author Xuefen.Tong
017  * @param array $items
018  * @return array
019  */
020 function genTree9($items) {
021     $tree array(); //格式化好的树
022     foreach ($items as $item)
023         if (isset($items[$item['pid']]))
024             $items[$item['pid']]['son'][] = &$items[$item['id']];
025         else
026             $tree[] = &$items[$item['id']];
027     return $tree;
028 }
029  
030 $items array(
031     1 => array('id' => 1, 'pid' => 0, 'name' => '江西省'),
032     2 => array('id' => 2, 'pid' => 0, 'name' => '黑龙江省'),
033     3 => array('id' => 3, 'pid' => 1, 'name' => '南昌市'),
034     4 => array('id' => 4, 'pid' => 2, 'name' => '哈尔滨市'),
035     5 => array('id' => 5, 'pid' => 2, 'name' => '鸡西市'),
036     6 => array('id' => 6, 'pid' => 4, 'name' => '香坊区'),
037     7 => array('id' => 7, 'pid' => 4, 'name' => '南岗区'),
038     8 => array('id' => 8, 'pid' => 6, 'name' => '和兴路'),
039     9 => array('id' => 9, 'pid' => 7, 'name' => '西大直街'),
040     10 => array('id' => 10, 'pid' => 8, 'name' => '东北林业大学'),
041     11 => array('id' => 11, 'pid' => 9, 'name' => '哈尔滨工业大学'),
042     12 => array('id' => 12, 'pid' => 8, 'name' => '哈尔滨师范大学'),
043     13 => array('id' => 13, 'pid' => 1, 'name' => '赣州市'),
044     14 => array('id' => 14, 'pid' => 13, 'name' => '赣县'),
045     15 => array('id' => 15, 'pid' => 13, 'name' => '于都县'),
046     16 => array('id' => 16, 'pid' => 14, 'name' => '茅店镇'),
047     17 => array('id' => 17, 'pid' => 14, 'name' => '大田乡'),
048     18 => array('id' => 18, 'pid' => 16, 'name' => '义源村'),
049     19 => array('id' => 19, 'pid' => 16, 'name' => '上坝村'),
050 );
051 echo "<pre>";
052 print_r(genTree5($items));
053 print_r(genTree9($items));
054  
055 //后者输出格式,前者类似,只是数组键值不一样,不过不影响数据结构
056 /*
057 Array
058 (
059 [0] => Array
060     (
061         [id] => 1
062         [pid] => 0
063         [name] => 江西省
064         [son] => Array
065             (
066                 [0] => Array
067                     (
068                         [id] => 3
069                         [pid] => 1
070                         [name] => 南昌市
071                     )
072  
073                 [1] => Array
074                     (
075                         [id] => 13
076                         [pid] => 1
077                         [name] => 赣州市
078                         [son] => Array
079                             (
080                                 [0] => Array
081                                     (
082                                         [id] => 14
083                                         [pid] => 13
084                                         [name] => 赣县
085                                         [son] => Array
086                                             (
087                                             [0] => Array
088                                                 (
089                                                     [id] => 16
090                                                     [pid] => 14
091                                                     [name] => 茅店镇
092                                                     [son] => Array
093                                                         (
094                                                         [0] => Array
095                                                             (
096                                                             [id] => 18
097                                                             [pid] => 16
098                                                             [name] => 义源村
099                                                             )
100  
101                                                         [1] => Array
102                                                             (
103                                                             [id] => 19
104                                                             [pid] => 16
105                                                             [name] => 上坝村
106                                                             )
107  
108                                                         )
109  
110                                                 )
111  
112                                             [1] => Array
113                                                 (
114                                                     [id] => 17
115                                                     [pid] => 14
116                                                     [name] => 大田乡
117                                                 )
118  
119                                             )
120  
121                                     )
122  
123                                 [1] => Array
124                                     (
125                                         [id] => 15
126                                         [pid] => 13
127                                         [name] => 于都县
128                                     )
129  
130                             )
131  
132                     )
133  
134             )
135  
136     )
137  
138 [1] => Array
139     (
140         [id] => 2
141         [pid] => 0
142         [name] => 黑龙江省
143         [son] => Array
144             (
145                 [0] => Array
146                     (
147                         [id] => 4
148                         [pid] => 2
149                         [name] => 哈尔滨市
150                         [son] => Array
151                             (
152                             [0] => Array
153                                 (
154                                     [id] => 6
155                                     [pid] => 4
156                                     [name] => 香坊区
157                                     [son] => Array
158                                         (
159                                         [0] => Array
160                                             (
161                                                 [id] => 8
162                                                 [pid] => 6
163                                                 [name] => 和兴路
164                                                 [son] => Array
165                                                     (
166                                                         [0] => Array
167                                                             (
168                                                             [id] => 10
169                                                             [pid] => 8
170                                                             [name] =>
171                                                              东北林业大学
172                                                             )
173  
174                                                         [1] => Array
175                                                             (
176                                                             [id] => 12
177                                                             [pid] => 8
178                                                             [name] =>
179                                                             哈尔滨师范大学
180                                                             )
181  
182                                                     )
183  
184                                             )
185  
186                                         )
187  
188                                 )
189  
190                             [1] => Array
191                                 (
192                                     [id] => 7
193                                     [pid] => 4
194                                     [name] => 南岗区
195                                     [son] => Array
196                                         (
197                                         [0] => Array
198                                             (
199                                             [id] => 9
200                                             [pid] => 7
201                                             [name] => 西大直街
202                                             [son] => Array
203                                                 (
204                                                 [0] => Array
205                                                     (
206                                                     [id] => 11
207                                                     [pid] => 9
208                                                     [name] =>
209                                                      哈尔滨工业大学
210                                                     )
211  
212                                                 )
213  
214                                             )
215  
216                                         )
217  
218                                 )
219  
220                             )
221  
222                     )
223  
224                 [1] => Array
225                     (
226                         [id] => 5
227                         [pid] => 2
228                         [name] => 鸡西市
229                     )
230  
231             )
232  
233     )
234 )*/
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值