当前位置:首页 > PHP教程 > php应用 > 列表

PHP超牛逼无限极分类生成树方法

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-26 15:02:42 浏览: 评论:0 

你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。

这是我在OSChina上看到的一段非常精简的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)); 

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

  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行:

  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. } 

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

  1. /** 
  2.  * 如何取数据格式化的树形数据 
  3.  */ 
  4. $tree = generateTree($items); 
  5. function getTreeData($tree){ 
  6.     foreach($tree as $t){ 
  7.         echo $t['name'].'<br>'; 
  8.         if(isset($t['son'])){ 
  9.             getTreeData($t['son']); 
  10.         } 
  11.     } 
  12. } 
  13. getTreeData($tree);

Tags: PHP无限极分类生成树

分享到: