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

下面是运行的结果:
php之无限极分类

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

上一篇:Vue全家桶之VueX


下一篇:关于.Net Core生成JSON时错误