首页 网络编程 前端制作 数据库 CMS教程 脚本编程 微信开发 服务器 小程序 框架 手机APP

php技巧

热门: ASP.NET PHP编程 ASP编程 JSP编程

php之无限极分类,获取无限上级和下级

来源:未知 发布时间:2019-04-14
  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'].' >> ';  
网络编程 | 前端制作 | 数据库 | CMS教程 | 脚本编程 | 微信开发 | 服务器 | 小程序 | 框架 | 手机APP |

程序员学习网,提供最新的微信开发教程,小程序开发教程,网络编程、php教程、asp.net教程、微信公众平台二次开发教程、脚本编程、网页制作、网页设计、网页特效,为站长与网络编程从业者提供学习资料,凡本网站转载的文章、图片等资料的版权归版权所有人所有,因无法和版权所有者一一联系,如果本网站选取的文/图威胁到您的权益,请您及时和本网站联系。 我们会在第一时间内采取措施,避免给双方造 成不必要的损失。
© 2015-2018 程序员学习网 版权所有,并保留所有权利。

电脑版 | 移动版