• php之无限极分类


    首先建立分类信息表:

    1. CREATE TABLE IF NOT EXISTS `category` (  
    2.   `categoryId` smallint(5) unsigned NOT NULL AUTO_INCREMENT,  
    3.   `parentId` smallint(5) unsigned NOT NULL DEFAULT '0',  
    4.   `categoryName` varchar(50) NOT NULL,  
    5.   PRIMARY KEY (`categoryId`)  
    6. )  ;  


    插入若干数据:

    1. INSERT INTO `category` (`categoryId`, `parentId`, `categoryName`) VALUES  
    2. (1, 0, 'php'),  
    3. (2, 0, 'java'),  
    4. (3, 0, 'c/c++'),  
    5. (4, 1, 'php基础'),  
    6. (5, 1, 'php开源资料'),  
    7. (6, 1, 'php框架'),  
    8. (7, 2, 'java Se'),  
    9. (8, 2, 'java EE'),  
    10. (9, 2, 'java Me'),  
    11. (10, 3, 'c/c++基础编程'),  
    12. (11, 3, 'c/c++系统开发'),  
    13. (12, 3, 'c嵌入式编程'),  
    14. (13, 3, 'c++应用开发'),  
    15. (14, 13, 'c++桌面应用开发'),  
    16. (15, 13, 'c++游戏开发');  


    下面是php代码:

    1. <?php  
    2. /*  
    1. php无限极分类  
    1. */  
    2.   
    3. //获取某分类的直接子分类  
    4. function getSons($categorys,$catId=0){  
    5.     $sons=array();  
    6.     foreach($categorys as $item){  
    7.         if($item['parentId']==$catId)  
    8.             $sons[]=$item;  
    9.     }  
    10.     return $sons;  
    11. }  
    12.   
    13. //获取某个分类的所有子分类  
    14. function getSubs($categorys,$catId=0,$level=1){  
    15.     $subs=array();  
    16.     foreach($categorys as $item){  
    17.         if($item['parentId']==$catId){  
    18.             $item['level']=$level;  
    19.             $subs[]=$item;  
    20.             $subs=array_merge($subs,getSubs($categorys,$item['categoryId'],$level+1));  
    21.               
    22.         }  
    23.               
    24.     }  
    25.     return $subs;  
    26. }  
    27.   
    28. //获取某个分类的所有父分类  
    29. //方法一,递归  
    30. function getParents($categorys,$catId){  
    31.     $tree=array();  
    32.     foreach($categorys as $item){  
    33.         if($item['categoryId']==$catId){  
    34.             if($item['parentId']>0)  
    35.                 $tree=array_merge($tree,getParents($categorys,$item['parentId']));  
    36.             $tree[]=$item;    
    37.             break;    
    38.         }  
    39.     }  
    40.     return $tree;  
    41. }  
    42.   
    43. //方法二,迭代  
    44. function getParents2($categorys,$catId){  
    45.     $tree=array();  
    46.     while($catId != 0){  
    47.         foreach($categorys as $item){  
    48.             if($item['categoryId']==$catId){  
    49.                 $tree[]=$item;  
    50.                 $catId=$item['parentId'];  
    51.                 break;    
    52.             }  
    53.         }  
    54.     }  
    55.     return $tree;  
    56. }  
    57.   
    58.   
    59. //测试 部分  
    60. $pdo=new PDO('mysql:host=localhost;dbname=test','root','8888');  
    61. $stmt=$pdo->query("select * from category order by categoryId");  
    62. $categorys=$stmt->fetchAll(PDO::FETCH_ASSOC);  
    63.   
    64. $result=getSons($categorys,1);  
    65. foreach($result as $item)  
    66.     echo $item['categoryName'].'<br>';  
    67. echo '<hr>';  
    68.   
    69. $result=getSubs($categorys,0);  
    70. foreach($result as $item)  
    71.     echo str_repeat('  ',$item['level']).$item['categoryName'].'<br>';  
    72. echo '<hr>';  
    73.   
    74. $result=getParents($categorys,7);  
    75. foreach($result as $item)  
    76.     echo $item['categoryName'].' >> ';  
    77. echo '<hr>';  
    78.   
    79. $result=getParents2($categorys,15);  
    80. foreach($result as $item)  
    81.     echo $item['categoryName'].' >> ';  
    82.   
    83.   
    84.   
    85.   
    86.   
    87.   
    88. ?>  


    下面是运行的结果:

    文章来源:http://blog.csdn.net/kankan231/article/details/8462349

  • 相关阅读:
    文件数据分析制作过程【1】
    VBA学习(4)
    QTP9.2 .net与java插件破解
    GPRS开发系列文章之实战篇
    time_t到.NET的转换
    RAS函数
    GPRS开发系列文章之入门篇
    [转]惹恼程序员的十件事
    好玩和可爱的网站
    GPRS开发系列文章之进阶篇
  • 原文地址:https://www.cnblogs.com/isboy/p/3860957.html
Copyright © 2020-2023  润新知