无限极分类

 

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))

 

posted @ 2018-12-03 15:37  suanmei  阅读(137)  评论(0编辑  收藏  举报