PHP无限极分类生成树方法,无限分级

时间:2023-01-21 12:02:46

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
这是我在OSChina上看到的一段非常精简的PHP无限极分类生成树方法,巧在引用,整理分享了。

 

Php代码   PHP无限极分类生成树方法,无限分级
  1. function generateTree($items){  
  2.     $tree = array();  
  3.     foreach($items as $item){  
  4.         if(isset($items[$item['pid']])){  
  5.             $items[$item['pid']]['son'][] = &$items[$item['id']];  
  6.         }else{  
  7.             $tree[] = &$items[$item['id']];  
  8.         }  
  9.     }  
  10.     return $tree;  
  11. }  
  12. $items = array(  
  13.     1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'),  
  14.     2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'),  
  15.     3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'),  
  16.     4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'),  
  17.     5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'),  
  18. );  
  19. print_r(generateTree($items));  

 

 

可以看到下面打印的结果:

Php代码   PHP无限极分类生成树方法,无限分级
  1. Array  
  2. (  
  3.     [0] => Array  
  4.         (  
  5.             [id] => 1  
  6.             [pid] => 0  
  7.             [name] => 安徽省  
  8.             [son] => Array  
  9.                 (  
  10.                     [0] => Array  
  11.                         (  
  12.                             [id] => 3  
  13.                             [pid] => 1  
  14.                             [name] => 合肥市  
  15.                             [son] => Array  
  16.                                 (  
  17.                                     [0] => Array  
  18.                                         (  
  19.                                             [id] => 4  
  20.                                             [pid] => 3  
  21.                                             [name] => 长丰县  
  22.                                         )  
  23.    
  24.                                 )  
  25.    
  26.                         )  
  27.    
  28.                     [1] => Array  
  29.                         (  
  30.                             [id] => 5  
  31.                             [pid] => 1  
  32.                             [name] => 安庆市  
  33.                         )  
  34.    
  35.                 )  
  36.    
  37.         )  
  38.    
  39.     [1] => Array  
  40.         (  
  41.             [id] => 2  
  42.             [pid] => 0  
  43.             [name] => 浙江省  
  44.         )  
  45.    
  46. )  

 

上面生成树方法还可以精简到5行:

Php代码   PHP无限极分类生成树方法,无限分级
  1. function generateTree($items){  
  2.     foreach($items as $item)  
  3.         $items[$item['pid']]['son'][$item['id']] = &$items[$item['id']];  
  4.     return isset($items[0]['son']) ? $items[0]['son'] : array();  
  5. }  

 

上面这种无限极分类数据树形结构化的方法值得借鉴。但是我觉得这段代码实际用途并不明显啊,你想取出格式化的树形数据还是要递归啊:

Php代码   PHP无限极分类生成树方法,无限分级
  1. /** 
  2.  * 如何取数据格式化的树形数据 
  3.  * @blog<http://www.phpddt.com> 
  4.  */  
  5. $tree = generateTree($items);  
  6. function getTreeData($tree){  
  7.     foreach($tree as $t){  
  8.         echo $t['name'].'<br>';  
  9.         if(isset($t['son'])){  
  10.             getTreeData($t['son']);  
  11.         }  
  12.     }  
  13. }  
  14. getTreeData($tree);  

 

转载请注明地址: http://www.phpddt.com/php/generateTree.html