Welcome

首页 / 网页编程 / PHP / PHP实现多级分类生成树的方法示例

本文实例讲述了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程序设计有所帮助。