无限极分类
1、找指定栏目的子孙树
function subtree($arr,$id=0) { // 普通变量函数每调用一次 初始化一次 static 静态变量(跟类中的static不一样的,这是函数中) 调用一次在函数外部定义变量 在此调用不会再次初始化 $subs= array(); // 这样每次递归 函数调用 $subs都为新的空的 调用递归内层只是返回 并没有拼接到外层的$subs 黑瞎子掰玉米逻辑一边掰一边扔掉 解决方法用静态变量 static $subs= array(); foreach($arr as $v) { if($v['parent'] == $id) { $subs[] = $v; //找到的山东,山东有没有子地区子栏目 不知道。所以在此调用自身 subtree($arr,$v['id']); } } return $sons; } 再次优化 缩进 在加一个level function subtree($arr,$id=0,$level=1) { static $subs= array(); foreach($arr as $v) { if($v['parent'] == $id) { $v['lev'] = $level; $subs[] = $v; subtree($arr,$v['id'],$level+1); } } return $sons; } $tree = subtree($area,0,1); foreach($tree as $v){ echo str_repeat('$nbsp;$nbsp;',$v['lev']).$v['name'].'<br>' }
2、家谱树 从最里面找 应用 面包屑导航
// 只要parent != 0 就继续找 function familytree($arr,$id) { static $tree = array(); foreach($arr as $v){ if($v['id'] = $id) { // $tree[] = $v; 换下位置就可以实现从外到内 if($v['parent'] > 0) { familytree($arr,$v['parent']) }
$tree[] = $v; } } return $tree; } print_r(familytree($area,8))