当前位置:首页 > 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. $items = array
  12.     1 => array('id' => 1, 'pid' => 0, 'name' => '安徽省'), 
  13.     2 => array('id' => 2, 'pid' => 0, 'name' => '浙江省'), 
  14.     3 => array('id' => 3, 'pid' => 1, 'name' => '合肥市'), 
  15.     4 => array('id' => 4, 'pid' => 3, 'name' => '长丰县'), 
  16.     5 => array('id' => 5, 'pid' => 1, 'name' => '安庆市'), 
  17. ); 
  18. print_r(generateTree($items)); 

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

  1. Array 
  2.     [0] => Array 
  3.         ( 
  4.             [id] => 1 
  5.             [pid] => 0 
  6.             [name] => 安徽省 
  7.             [son] => Array 
  8.                 ( 
  9.                     [0] => Array 
  10.                         ( 
  11.                             [id] => 3 
  12.                             [pid] => 1 
  13.                             [name] => 合肥市 
  14.                             [son] => Array 
  15.                                 ( 
  16.                                     [0] => Array 
  17.                                         ( 
  18.                                             [id] => 4 
  19.                                             [pid] => 3 
  20.                                             [name] => 长丰县 
  21.                                         ) 
  22.  
  23.                                 ) 
  24.  
  25.                         ) 
  26.  
  27.                     [1] => Array 
  28.                         ( 
  29.                             [id] => 5 
  30.                             [pid] => 1 
  31.                             [name] => 安庆市 
  32.                         ) 
  33.  
  34.                 ) 
  35.  
  36.         ) 
  37.  
  38.     [1] => Array 
  39.         ( 
  40.             [id] => 2 
  41.             [pid] => 0 
  42.             [name] => 浙江省 
  43.         ) 
  44.  

上面生成树方法还可以精简到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(); 

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

  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. getTreeData($tree);

Tags: PHP无限极分类生成树

分享到: