当前位置:Gxlcms > PHP教程 > PHP实现多级分类生成树的方法

PHP实现多级分类生成树的方法

时间:2021-07-01 10:21:17 帮助过:5人阅读

这篇文章主要介绍了PHP实现多级分类生成树的方法,涉及php+mysql数据库操作及数组与字符串遍历、替换、组合等相关操作技巧,需要的朋友可以参考下

具体如下:

条件,数据库里分类是按id,fid(父ID)实现多级分类的!

使用方法:

  1. $sql ="XXXXXXXXXX"; //sql语句
  2. $res = $db->Select($sql); //执行sql
  3. $list=array();
  4. treeList(treeGet($res),$list); /生成树
  5. print_r($res); //打印出来看看!

使用结果:

  1. ┣推荐新闻啊
  2. ┃┣国际新闻
  3. ┃┣dfffffg
  4. ┃┣ttttttt
  5. ┃┃┗yyyyy

代码如下:

  1. /**
  2. * 选择SQL涵数
  3. *
  4. * @access public
  5. * @param Array $field 字段信息,支持涵数
  6. * @param Array $table 数据库表
  7. * @param Array $where 条件
  8. * @return SQL SQL语句
  9. */
  10. function treeGet($data)
  11. {
  12. $tmptree=null;
  13. $tree=$data;
  14. return treeAddNodeToTree($tmptree,treegetbyuid($tree,0,@$field),$tree);
  15. }
  16. /**
  17. *插入SQL涵数
  18. *
  19. * @access public
  20. * @param Array $fieldResult 字段信息,支持涵数
  21. * @param Array $table 数据库表
  22. * @return SQL SQL语句
  23. */
  24. function treeAddNodeToTree($Node,$miniTree,&$source)
  25. {
  26. if(is_array($miniTree)) {
  27. foreach($miniTree as $k=>$v)
  28. {
  29. if(!count($miniTree[$k]['child']=treeAddNodeToTree($miniTree[$k],treegetbyuid($source,@$v['id']),$source)))
  30. {
  31. unset($miniTree[$k]['child']);
  32. $miniTree[$k]['leaf']=true; //设置叶结点
  33. }
  34. }
  35. return $Node['child']=$miniTree;
  36. }
  37. }
  38. function treegetbyuid(&$stree,$uid)
  39. {
  40. $dtree=array();
  41. if(is_array($stree)){
  42. foreach($stree as $k=>$v)
  43. {
  44. if($v['fid']==$uid)
  45. {
  46. $mytmp=array();
  47. $mytmp=$v;
  48. unset($stree[$k]);
  49. array_push($dtree,$mytmp);
  50. $mytmp=null;
  51. }
  52. }
  53. }
  54. return $dtree;
  55. }
  56. /**
  57. *更新SQL涵数
  58. *
  59. * @access public
  60. * @param Array $fieldResult 字段信息,支持涵数
  61. * @param Array $table 数据库表
  62. * @param Array $where 条件
  63. * @return SQL SQL语句
  64. */
  65. function treeMakeDeep($deep)
  66. {
  67. $returnValue="";
  68. for (;$deep;$deep--)
  69. {
  70. $returnValue.="┃";
  71. }
  72. return $returnValue."┣";
  73. }
  74. function treeList($treeData,&$List)
  75. {
  76. static $deep=0;
  77. if(is_array($treeData))
  78. {
  79. foreach($treeData as $k=>$v)
  80. {
  81. $v['deepValue']=treeMakeDeep($deep);
  82. $v['deep']=$deep;
  83. $t=$v;
  84. unset($t['child']);
  85. array_push($List,$t);
  86. if($v['child'])
  87. {
  88. ++$deep;
  89. $optionsNode.=treeList($v['child'],$List);
  90. $deep--;
  91. }
  92. }
  93. if($lastV=array_pop($List))
  94. {
  95. $lastV['deepValue']=str_replace('┣','┗',$lastV['deepValue']);
  96. array_push($List,$lastV);
  97. }
  98. }
  99. }
  100. function treeSelect($tree,$id,$options="child")
  101. {
  102. switch(strtolower($options))
  103. {
  104. case"child":
  105. $tmpTree=array();
  106. $deep=-1;
  107. foreach($tree as $k=>$v)
  108. {
  109. if($id==$v['id'])
  110. {
  111. array_push($tmpTree,$v);
  112. $deep=$v['deep'];
  113. } elseif($deep!=-1)
  114. {
  115. if($v['deep']<=$deep)
  116. {
  117. break;
  118. } else
  119. {
  120. array_push($tmpTree,$v);
  121. }
  122. }
  123. }
  124. break;
  125. case "remove":
  126. default:
  127. $tmpTree=array();
  128. $deep=-1;
  129. foreach($tree as $k=>$v)
  130. {
  131. if($id==$v['id'])
  132. {
  133. $deep=$v['deep'];
  134. continue;
  135. } elseif($deep!=-1)
  136. {
  137. if($v['deep']<=$deep)
  138. {
  139. array_push($tmpTree,$v);
  140. $deep=-1;
  141. }
  142. continue;
  143. }
  144. array_push($tmpTree,$v);
  145. }
  146. }
  147. return $tmpTree;
  148. }

以上就是本文的全部内容,希望对大家的学习有所帮助。


相关推荐:

大量多级分类数据的获取、缓存、搜索查询 怎么设计最快 ?

sql 多级分类的级联查询

SQL处理多级分类,查询结果呈树形结构

以上就是PHP实现多级分类生成树的方法的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行