We know that the infinite classification of many open-source software uses recursion.AlgorithmBut we know that recursion is a waste of time and space (memory ),
Last time I also shared my original method of generating tree with unlimited categories. A enthusiastic PHP expert gave me valuable suggestions. I tested this section.CodeIs very short, refer:
Bytes. The Code is also very concise.
<? PHP/*** this method is supplied by @ 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 ();}/*** format the data into a tree structure * @ author xuefen. tong * @ Param array $ items * @ return array */function gentree9 ($ items) {$ tree = array (); // formatted tree 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' => 'jiangxi '), 2 => array ('id' => 2, 'pid '=> 0, 'name' => 'heilongjiang province '), 3 => array ('id' => 3, 'pid '=> 1, 'name' => 'nanchang City '), 4 => array ('id' => 4, 'pid '=> 2, 'name' => 'harbin '), 5 => array ('id' => 5, 'pid '=> 2, 'name' => 'jixi City '), 6 => array ('id' => 6, 'pid '=> 4, 'name' => 'xiangfang Region '), 7 => array ('id' => 7, 'pid '=> 4, 'name' => 'nangang '), 8 => array ('id' => 8, 'pid '=> 6, 'name' =>' and xinglu '), 9 => array ('id' => 9, 'pid '=> 7, 'name' => 'westbrook Street '), 10 => array ('id' => 10, 'pid '=> 8, 'name' => 'northeast forestry Emy '), 11 => array ('id' => 11, 'pid '=> 9, 'name' => 'harbin Institute of Technology '), 12 => array ('id' => 12, 'pid '=> 8, 'name' => 'harbin Normal University '), 13 => array ('id' => 13, 'pid '=> 1, 'name' => 'ganzhou City '), 14 => array ('id' => 14, 'pid '=> 13, 'name' => 'ganxian '), 15 => array ('id' => 15, 'pid '=> 13, 'name' => 'yudu County '), 16 => array ('id' => 16, 'pid '=> 14, 'name' => 'moudian Zhen '), 17 => array ('id' => 17, 'pid' => 14, 'name' => 'tagname '), 18 => array ('id' => 18, 'pid '=> 16, 'name' => 'yiyuan cune '), 19 => array ('id' => 19, 'pid '=> 16, 'name' => 'shangba cune'),); echo "<PRE> "; print_r (gentree5 ($ items); print_r (gentree9 ($ items); // The latter output format. The former format is similar, but the array key values are different, however, the data structure is not affected./* array ([0] => array ([ID] => 1 [pid] => 0 [name] => Jiangxi [son] => Array ([0] => array ([ID] => 3 [pid] => 1 [name] => Nanchang City) [1] => array ([ID] => 13 [pid] => 1 [name] => Ganzhou [son] => array ([0] => array ([ id] => 14 [pid] => 13 [name] => ganxian [son] => array ([0] => array ([ID] => 16 [pid] => 14 [name] => moudian town [son] => array ([0] => array ([ID] => 18 [pid] => 16 [name] => yiyuan Village) [1] => array ([ID] => 19 [pid] => 16 [name] => Shangba Village ))) [1] => array ([ID] => 17 [pid] => 14 [name] => Datian ))) [1] => array ([ID] => 15 [pid] => 13 [name] => yudu County ))))) [1] => array ([ID] => 2 [pid] => 0 [name] => Heilongjiang [son] => array ([0] => array ([ id] => 4 [pid] => 2 [name] => Harbin [son] => array ([0] => array ([ID] => 6 [pid] => 4 [name] => xiangfang district [son] => array ([0] => array ([ID] => 8 [pid] => 6 [name] => hexing road [son] => array ([0] => array ([ID] => 10 [pid] => 8 [name] => Northeast Forestry University) [1] => array ([ID] => 12 [pid] => 8 [name] => Harbin Normal University ))))) [1] => array ([ID] => 7 [pid] => 4 [name] => Nangang district [son] => array ([0] => array ([ id] => 9 [pid] => 7 [name] => westbound Street [son] => array ([0] => array ([ID] => 11 [PID] => 9 [name] => Harbin Institute of Technology ))))))) [1] => array ([ID] => 5 [pid] => 2 [name] => Jixi City ))))*/
Source: http://www.oschina.net/code/snippet_173183_11767? P = 3 # comments