你的 $class_arr 是什么样子的?
贴出来看看

解决方案 »

  1.   

    array(5) { [0]=> array(5) { [0]=> string(1) "1" [1]=> string(1) "0" [2]=> string(9) "顶级分类1" [3]=> string(1) "0" [4]=> string(1) "1" } [1]=> array(5) { [0]=> string(3) "713" [1]=> string(1) "0" [2]=> string(30) "顶级分类2" [3]=> string(1) "0" [4]=> string(1) "1" } [2]=> array(5) { [0]=> string(3) "716" [1]=> string(1) "0" [2]=> string(33) "一级子分类1" [3]=> string(3) "713" [4]=> string(1) "1" } [3]=> array(5) { [0]=> string(3) "718" [1]=> string(1) "0" [2]=> string(31) "顶级分类3" [3]=> string(1) "0" [4]=> string(1) "1" } [4]=> array(5) { [0]=> string(3) "721" [1]=> string(1) "0" [2]=> string(33) "二级子分类1" [3]=> string(3) "716" [4]=> string(1) "1" } } 是个二维数组,目前有五个一维数组。对每个一维数组来说,[0]是id,[2]是名称,[3]是父节点序号,其余的不重要。
      

  2.   

    怎么就不知道与人方便,与己方便的道理呢?消除递归就是用自己的堆栈,代替系统的堆栈$ar = array(
      array(  "1", "0", "顶级分类1",     "0", "1"),
      array("713", "0", "顶级分类2",     "0", "1"),
      array("716", "0", "一级子分类1", "713", "1"),
      array("718", "0", "顶级分类3",     "0", "1"),
      array("721", "0", "二级子分类1", "716", "1"),
    );$id = 713;
    delRecursive($id, $ar);
    func($id, $ar);function func($id, $class_arr)
    {
        if($id=="") $id=0;
        $st = array($id);
        do {
          $cnt = count($st);
          for($i=0;$i<count($class_arr);$i++){
            if(in_array($id = $class_arr[$i][3], $st)){
                $subid=$class_arr[$i][0];
                if(! in_array($subid, $st)) {
                  $st[] = $subid;
    echo "$id,$subid\n";   
    //            $this->db->delete('tree', array('id' => $id));
    //            $this->db->delete('tree', array('id' => $subid));    
    //            delRecursive($subid,$class_arr);
                }
            }   
          }
        }while($cnt < count($st));
    }function delRecursive($id, $class_arr)
    {
        if($id=="") $id=0;
        for($i=0;$i<count($class_arr);$i++){
            if($class_arr[$i][3]==$id){
                $subid=$class_arr[$i][0];
    //            $this->db->delete('tree', array('id' => $id));
    //            $this->db->delete('tree', array('id' => $subid));    
    echo "$id,$subid\n";   
                delRecursive($subid,$class_arr);
            }   
        }
    }
      

  3.   


    $st = array($id);
    do {
                    $cnt = count($st);
                     for($i=0;$i<count($class_arr);$i++){
                        if(in_array($class_arr[$i][3], $st)){
                            $subid=$class_arr[$i][0];
                                if(!in_array($subid, $st)) {
                                    $st[] = $subid;
                                    $this->DB_MT->delete('tree', array('id' => $id));
                                    $this->DB_MT->delete('tree', array('id' => $subid));
                                }
                            }   
                        }
    }while($cnt < count($st));