当前位置:首页 > PHP教程 > php应用 > 列表

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

发布:smiling 来源: PHP粉丝网  添加日期:2018-07-31 11:28:41 浏览: 评论:0 

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

Tags: 示例 方法

分享到: