We know that the infinite classification of many open-source software uses recursive algorithms, but 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 it, this code takes a very short time. for details, refer. The code is also very concise.
-
- /**
- * This method is provided 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"
"; - Print_r (genTree5 ($ items ));
- Print_r (genTree9 ($ items ));
- // The latter output format. the former format is similar, but the array key values are different, but 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 City
- [Son] => Array
- (
- [0] => Array
- (
- [Id] => 14
- [Pid] => 13
- [Name] => Ganxian County
- [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 Township
- )
- )
- )
- [1] => Array
- (
- [Id] => 15
- [Pid] => 13
- [Name] => Yudu County
- )
- )
- )
- )
- )
- [1] => Array
- (
- [Id] => 2
- [Pid] => 0
- [Name] => Heilongjiang province
- [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] => hexinglu
- [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
- )
- )
- )
- )*/
|