首页 > 开发 > PHP > 正文

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

2024-05-04 22:01:05
字体:大 中 小
来源:转载
供稿:网友

条件,数据库里分类是按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); //打印出来看看! 
使用结果:
 
┣推荐新闻啊
 
┃┣国际新闻
 
┃┣dfffffg
 
┃┣ttttttt
 
┃┃┗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. functiontreeGet($data) 
  11. { 
  12.   $tmptree=null; 
  13.   $tree=$data; 
  14.   returntreeAddNodeToTree($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. functiontreeAddNodeToTree($Node,$miniTree,&$source) 
  25. { 
  26.   if(is_array($miniTree)) { 
  27.     <a href="/tags.php/foreach/" target="_blank">foreach</a>($miniTreeas$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. functiontreegetbyuid(&$stree,$uid) 
  39. { 
  40.   $dtree=array(); 
  41.   if(is_array($stree)){ 
  42.     foreach($streeas$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. functiontreeMakeDeep($deep) 
  66. { 
  67.   $returnValue=""; 
  68.   for(;$deep;$deep--) 
  69.   { 
  70.     $returnValue.="┃"; 
  71.   } 
  72.   return$returnValue."┣"; 
  73. } 
  74. functiontreeList($treeData,&$List) 
  75. { 
  76.   static$deep=0; 
  77.   if(is_array($treeData)) 
  78.   { 
  79.     foreach($treeDataas$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. functiontreeSelect($tree,$id,$options="child") 
  101. { 
  102.   switch(strtolower($options)) 
  103.   { 
  104.     case"child": 
  105.     $tmpTree=array(); 
  106.     $deep=-1; 
  107.     foreach($treeas$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($treeas$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. } 

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表