先准备库数据结构:

相关函数:
function get_cates($pid=0,$cates=array(),$level=0){
$result = get_by_name("category","pid=$pid");
if(!empty($result)){
foreach($result as $value){
$str = "";
for($i=0;$i<$level;$i++){
$str .="<span color='red'>-</span>";
}
$value['name'] = $str.$value['name'];
$cates[] = $value;
$cates = get_cates($pid=$value['id'],$cates,$level+1);
}
}
return $cates;
}
//根据当前id查出其所有子类id
function get_ids($dir,$id,$results = array()){
$result = get_by_name($dir,"pid=$id");
if(!empty($result)){
for($i=0;$i<count($result);$i++){
$id = $result[$i]["id"];
$results[] = $result[$i];
$results = get_ids($dir,$id,$results);
}
}
return $results;
}
//将数据追加成多维格式
function get_arr($pid=0,$cates=array()){
$result = get_by_name("category","pid=$pid");
if(!empty($result)){
foreach($result as $key=>$value){
$cates[$key] = $value;
if(empty($cates[$key]['child'])){
$cates[$key]['child'] = array();
}
$cates[$key]['child'] = get_arr($value['id'],$cates[$key]['child']);
}
}
return $cates;
}
//递归遍历
function arr_foreach($dt,$level=0){
echo "<ul>";
foreach($dt as $key=>$value){
$str = "";
for($i=0;$i<$level;$i++){
$str .="        ";
}
foreach($value as $key=>$val){
if($key == "name"){
echo "<li><a href='#'><font color='#EB05B0' size='18px'>".$str.$val."</font></a></li>";
}else if($key=="child" && count($val) > 0){
arr_foreach($val,$level+1);
}
}
}
echo "</ul>";
}
//向上递归找祖先
function get_father($id){
$cat = Db::table(“category”)->where(“id”,$id)->find();
$name = $cat[‘name’];
$pid = $cat[‘pid’];
if($pid){
$name = get_father($pid);
}
return $name;
}
get_by_name()相当于tp5中的
Db::table(‘category’)->where(“pid”,$id)->select();