RELATEED CONSULTING
相关咨询
选择相应客服马上在线沟通
客服电话:0531-88989050
服务时间:8:30-18:00
关闭右侧工具栏
无限极分类,如何查找无限分类的所有上级和所有下级
  • 作者:大左软件
  • 发表时间:2020-03-26
  • 更新时间:2020-06-11
  • 新闻资讯
  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.             )  ;  

     

    插入若干数据:



    [sql] view plaincopy



  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代码:



    [php] view plaincopy



  1.             <?php  

  2.             /*  



    [php] view plaincopy



  1.             php无限极分类  



    [php] view plaincopy



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

  1.             //测试 部分  

  2.             $pdo=new PDO('mysql:host=localhost;dbname=test','root','8888');  

  3.             $stmt=$pdo->query("select * from category order by categoryId");  

  4.             $categorys=$stmt->fetchAll(PDO::FETCH_ASSOC);  

  5.               

  6.             $result=getSons($categorys,1);  

  7.             foreach($result as $item)  

  8.                 echo $item['categoryName'].'<br>';  

  9.             echo '<hr>';  

  10.               

  11.             $result=getSubs($categorys,0);  

  12.             foreach($result as $item)  

  13.                 echo str_repeat('  ',$item['level']).$item['categoryName'].'<br>';  

  14.             echo '<hr>';  

  15.               

  16.             $result=getParents($categorys,7);  

  17.             foreach($result as $item)  

  18.                 echo $item['categoryName'].' >> ';  

  19.             echo '<hr>';  

  20.               

  21.             $result=getParents2($categorys,15);  

  22.             foreach($result as $item)  

  23.                 echo $item['categoryName'].' >> ';