本文实例讲述了PHP实现多级分类生成树的方法。分享给大家供大家参考,具体如下:

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

使用方法:

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

使用结果:

┣推荐新闻啊┃┣国际新闻┃┣dfffffg┃┣ttttttt┃┃┗yyyyy

代码如下:

/*** 选择SQL涵数** @access public* @param Array  $field  字段信息,支持涵数* @param Array  $table  数据库表* @param Array  $where  条件* @return SQL SQL语句*/function treeGet($data){  $tmptree=null;  $tree=$data;  return treeAddNodeToTree($tmptree,treegetbyuid($tree,0,@$field),$tree);}/***插入SQL涵数** @access public* @param Array  $fieldResult  字段信息,支持涵数* @param Array  $table  数据库表* @return SQL SQL语句*/function treeAddNodeToTree($Node,$miniTree,&$source){  if(is_array($miniTree)) {    foreach($miniTree as $k=>$v)    {      if(!count($miniTree[$k]["child"]=treeAddNodeToTree($miniTree[$k],treegetbyuid($source,@$v["id"]),$source)))      {        unset($miniTree[$k]["child"]);        $miniTree[$k]["leaf"]=true; //设置叶结点      }    }    return $Node["child"]=$miniTree;  }}function treegetbyuid(&$stree,$uid){  $dtree=array();  if(is_array($stree)){    foreach($stree as $k=>$v)    {      if($v["fid"]==$uid)      {        $mytmp=array();        $mytmp=$v;        unset($stree[$k]);        array_push($dtree,$mytmp);        $mytmp=null;      }    }  }  return $dtree;}/***更新SQL涵数** @access public* @param Array  $fieldResult  字段信息,支持涵数* @param Array  $table  数据库表* @param Array  $where  条件* @return SQL SQL语句*/function treeMakeDeep($deep){  $returnValue="";  for (;$deep;$deep--)  {    $returnValue.="┃";  }  return $returnValue."┣";}function treeList($treeData,&$List){  static $deep=0;  if(is_array($treeData))  {    foreach($treeData as $k=>$v)    {      $v["deepValue"]=treeMakeDeep($deep);      $v["deep"]=$deep;      $t=$v;      unset($t["child"]);      array_push($List,$t);      if($v["child"])      {        ++$deep;        $optionsNode.=treeList($v["child"],$List);        $deep--;      }    }    if($lastV=array_pop($List))    {      $lastV["deepValue"]=str_replace("┣","┗",$lastV["deepValue"]);      array_push($List,$lastV);    }  }}function treeSelect($tree,$id,$options="child"){  switch(strtolower($options))  {    case"child":    $tmpTree=array();    $deep=-1;    foreach($tree as $k=>$v)    {      if($id==$v["id"])      {        array_push($tmpTree,$v);        $deep=$v["deep"];      } elseif($deep!=-1)      {        if($v["deep"]<=$deep)        {          break;        } else        {          array_push($tmpTree,$v);        }      }    }    break;    case "remove":    default:    $tmpTree=array();    $deep=-1;    foreach($tree as $k=>$v)    {      if($id==$v["id"])      {        $deep=$v["deep"];        continue;      } elseif($deep!=-1)      {        if($v["deep"]<=$deep)        {          array_push($tmpTree,$v);          $deep=-1;        }        continue;      }      array_push($tmpTree,$v);    }  }  return $tmpTree;}

PS:为方便读者阅读源码,上述代码使用了在线工具http://tools.jb51.net/code/jb51_php_format进行了格式化处理。

更多关于PHP相关内容感兴趣的读者可查看本站专题:《php+mysql数据库操作入门教程》、《php+mysqli数据库程序设计技巧总结》、《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《php字符串(string)用法总结》、《PHP网络编程技巧总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。