自己写了个递归算法,只能执行一次
研究了一天了,始终没找到问题所在,请高手指点,最好能给个修改好的代码!先谢了!
         //删除子类及自身函数
function delNodes($id,$Conn){
   $sql="select * from tvmenu where bid='$id'";
   $result_sun=mysql_query($sql,$Conn); 
   $num=mysql_num_rows($result_sun);  //查询该分类下子类数量
   if($num>0){  
      while($rs=mysql_fetch_array($result_sun)){  //循环调用递归
     delNodes($rs["id"],$Conn); 
  }    
   }else{
   $sql="delete FROM tvmenu WHERE id='$id'"; 
   $qu=mysql_query($sql,$Conn);   //如果没有子类,直接删除
if($qu){
$del="";
echo  "<script language='javascript'>alert('删除成功!');window.location='tree.php'</script>";
//exit;
}
 }
}

delNodes($b,$Conn);
 tvmenu数据表如下:

解决方案 »

  1.   


    function getDirectoryTree($data, $parentid = 0, $param, $treeid="tree"){
      global $languages;  if(count($data) > 0) {
        if($parentid == 0) {
          $str = " <ul id='" . $treeid . "' class='treeview'>";
        } else {
          $str = " <ul>";
        }
              
        $str1 = "";
        foreach($data as $k => $v){
          if($v->parentid == $parentid) {
             $str1 .= "<li>";
             $str1.= str_replace('#url#', $v->url, str_replace('#name#', $languages[$v->name], $param));
             $str1 .= getDirectoryTree($data, $v->id, $param);
             $str1 .= "</li>";
           }
        }
              
        if($str1 == "") {
          $str = "";
        } else {
          $str .=  $str1 . "</ul>";
        }
              
        return $str;
      }else {
        return "";
      }
    }快下班了,这是我以前写的一个,看对你有没有帮助
      

  2.   

    我也发1个以前写的。$array=Array(  
        0 => Array("id" => 329, "parent" => -1,"name" => "web", "user_id" => 3 ),  
        1 => Array("id" => 330, "parent" => 329, "name" => "php","user_id" => 3),  
        2 => Array("id" => 336,"parent" => 329,"name" => "nginx","user_id" => 3),  
        3 => Array("id" => 337,"parent" => 330,"name" => "apache","user_id" => 3),  
        4 => Array("id" => 338,"parent" => 336,"name" => "httpd", "user_id" => 3),  
        5 => Array("id" => 339,"parent" => 336,"name" => "httpd","user_id" => 3),  
        6 => Array("id" => 340,"parent" => 329,"name" => "httpd", "user_id" => 3),  
        7 => Array("id" => 341,"parent" => 329,"name" => "httpd", "user_id" => 3),  
        8 => Array("id" => 342,"parent" => -1,"name" => "httpd", "user_id" => 3),  
        9 => Array("id" => 343,"parent" => 329,"name" => "httpd", "user_id" => 3),  
        10 => Array("id" => 344,"parent" => 329,"name" => "httpd", "user_id" => 3),  
        14 => Array("id" => 348,"parent" => 329,"name" => "httpd", "user_id" => 3),  
        15 => Array("id" => 349,"parent" => -1,"name" => "httpd", "user_id" => 3),  
        100 => Array("id" => 3444,"parent" => 329,"name" => "httpd", "user_id" => 3)  
    );  
        function tree($array=null,$tid=null,$tpid=null,$tname=null,$pid=-1)  
        {  
            $str="";  
            foreach($array as $key=>$value)  
            {  
                if($value[$tpid]==$pid)  
                {  
                    unset($array[$key]);  
                    $str.="<li>".$value[$tname].  
                    tree($array,$tid,$tpid,$tname,$value[$tid])."</li>";  
                }  
            }  
           return $str ? "<ul>$str</ul>" : '';  
        }  
    print_r(tree($array,"id","parent","name"));  
      

  3.   

    你这个肯定有问题啊 delNodes($rs["id"],$Conn);
    改成
    delNodes($rs["bid"],$Conn);  
    试试
      

  4.   


    提示:PHP has encountered a Stack overflow 
      

  5.   

    函数内去掉
    echo  "<script language='javascript'>alert('删除成功!');window.location='tree.php'</script>";改为调用delNodes函数之后输出该语句