zoukankan      html  css  js  c++  java
  • PHP无限极分类生成树方法,无限分级

    你还在用浪费时间又浪费内存的递归遍历无限极分类吗,看了该篇文章,我觉得你应该换换了。
    这是我在OSChina上看到的一段非常精简的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代码  收藏代码
    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代码  收藏代码
    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代码  收藏代码
    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

  • 相关阅读:
    使用Windows Live Writer发布日志
    下雪
    Oracle中拼出树型结构
    [转载]Javascript中最常用的55个经典技巧
    博客访问者来自15个国家和地区
    [转载]一个帐号同一时间只能一个人登录
    换了博客的皮肤
    常见的开源软件许可
    java5中的Arrays
    青花瓷
  • 原文地址:https://www.cnblogs.com/ZDPPU/p/5780463.html
Copyright © 2011-2022 走看看