日期:2014-05-16  浏览次数:20479 次

递归无限分类树,怎么控制深度?
本帖最后由 XingGuangYingYing 于 2014-03-19 02:52:34 编辑
代码如下,如 echo nav(0,0); 就像是全部   nav(0,1);就显示一级  $deep 应该怎么判断呢?

另外,递归效率是个问题,可否一次性从数据库取出来,然后数组变啊变的  输出树形目录呢  用ul li包围

function nav($parent,$deep){
$res = '';
  $sql = mysql_query("SELECT * from menu where parent = $parent  order by ordering DESC");

  while($row = mysql_fetch_array($sql)){
  
  $res .= '<li><a href="'.$row['ename'].'">'.$row['cname'].'</a>';
 
    $t = nav($row['id'],$deep); 
    $res .= '<ul>'.$t.'</ul>';


    $res .= '</li>';
  }
  return $res;
}


}
------解决方案--------------------
引用传递

$deep = 0;
function nav($parent,&$deep){
 $depp++;
}
------解决方案--------------------
深度控制可以定义一个静态变量,每次执行一次递增,如果$deep大于0且等于静态变量的值,则不再继续递归。