參考
1. http://www.oschina.net/code/snippet_98719_11296
2. http://www.oschina.net/code/snippet_173183_11767 php
[1] 語句 $tree[] = &$items[$item['id']]; 這裏把不存在的鍵值、內容加上了,以下例中的鍵值4,可是沒法判斷其父類,會將其判斷爲根id,去掉不要;
[2] 考慮到字段名稱問題,使用[1]的參數模式,添加分類id和父類pid設置,同時處理一下取得的數據;.net
實例以下,從表中取得全部分類數據保存到$rows,已考慮添加順序和刪除記錄問題code
<?php /* * php無限分類數據樹形格式化 * * 此方法由 mantye 提供 * http://my.oschina.net/u/223350 * @date 2013-07-22 **/ function genTree($rows, $id='id', $pid='pid') { $items = array(); foreach ($rows as $row) $items[$row[$id]] = $row; foreach ($items as $item) $items[$item[$pid]]['son'][$item[$id]] = &$items[$item[$id]]; return isset($items[0]['son']) ? $items[0]['son'] : array(); } $rows = array( array('id' => 111, 'pid' => 0, 'name' => '江西省'), array('id' => 5, 'pid' => 2, 'name' => '雞西市'), array('id' => 2, 'pid' => 0, 'name' => '黑龍江省'), array('id' => 3, 'pid' => 111, 'name' => '南昌市'), //array('id' => 4, 'pid' => 2, 'name' => '哈爾濱市'), array('id' => 6, 'pid' => 4, 'name' => '香坊區'), array('id' => 27, 'pid' => 4, 'name' => '南崗區'), array('id' => 8, 'pid' => 6, 'name' => '和興路'), array('id' => 9, 'pid' => 27, 'name' => '西大直街'), array('id' => 10, 'pid' => 8, 'name' => '東北林業大學'), array('id' => 11, 'pid' => 9, 'name' => '哈爾濱工業大學'), array('id' => 12, 'pid' => 8, 'name' => '哈爾濱師範大學'), array('id' => 13, 'pid' => 111, 'name' => '贛州市'), array('id' => 14, 'pid' => 13, 'name' => '贛縣'), array('id' => 15, 'pid' => 13, 'name' => '於都縣'), array('id' => 16, 'pid' => 14, 'name' => '茅店鎮'), array('id' => 17, 'pid' => 14, 'name' => '大田鄉'), array('id' => 18, 'pid' => 16, 'name' => '義源村'), array('id' => 19, 'pid' => 16, 'name' => '上壩村') ); echo '<pre>'; $rows = genTree($rows); print_r($rows); ?>