if ($reid==0) {
      echo "检查是否已经运行到这里 <br />";
      return $data['typename'] ;                          //经检查,这边没有返回
}     

解决方案 »

  1.   

    改试试:
    if ($reid==0) { 
          echo "检查是否已经运行到这里 <br />"; 
          return $data['typename'] ; 
      } 
      

  2.   

    这和递归的原理有关系。
    因为递归的过程是这样的:
    1
     2
      3
       4
      3
     2
    1
    所以你最终返回的还是重孙目录
    修改muses($reid)为echo muses($reid);你就能看到其中的有意思之处。
      

  3.   

    最后的
     return $data['typename'] ;                      //这边返回了,但是..值怎么会是..... 
    这句不要了
      

  4.   


     function muses($typeid) 

    $con = mysql_connect("localhost","admin","seeingyoua"); 
    mysql_select_db("dedecms_ewoka", $con); 
    mysql_query('SET NAMES utf8'); 
    $reult_main=mysql_query("select typename,reid,typedir,defaultname from dede_arctype where id=$typeid",$con); 
      while ($reid_tmp = mysql_fetch_array($reult_main)) 
      { 
    $reid = $reid_tmp['reid']; 
    $data['typename'] = $reid_tmp['typename']; 
    $data['typedir'] = $reid_tmp['typedir']; 
    $data['dfname'] = $reid_tmp['defaultname'];   }  
      $con->close; 
      
      echo "执行返回".$data['typename']." <br />";      //显示信息,检查是否进行了递归...(确实递归了) if ($reid <>0) { 
          muses($reid); 
    }   if ($reid==0) { 
          echo "检查是否已经运行到这里 <br />"; 
          return $data['typename'] ;                       
      } 

    $fd=muses(18); echo '$fd='.$fd; 
    ?> 
    这样改就可以了,呵呵.
      

  5.   


    if ($reid <>0) {
          return muses($reid);
    }if ($reid==0) {
          return $data['typename']; 
    }
      

  6.   

    if ($reid==0) { 
          echo "检查是否已经运行到这里 <br />"; 
          $result = $data['typename'] ;  //此处改赋值试试,并且$result使用&$result传入
      } 
      

  7.   

    算了...我换了一种思路,问题好像解决了.....<?php
       
    function gen($reid)
    {
    $con = mysql_connect("localhost","admin","seeingyoua");
    mysql_select_db("dedecms_ewoka", $con);
    mysql_query('SET NAMES utf8');
    while ($reid<>0)
    {
       $reult_main=mysql_query("select typename,reid,typedir,defaultname from dede_arctype where id=$reid",$con);
       while ($reid_tmp = mysql_fetch_array($reult_main))
      {
    $reid = $reid_tmp['reid'];
    $data['typename'] = $reid_tmp['typename'];
    $data['typedir'] = $reid_tmp['typedir'];
    $data['dfname'] = $reid_tmp['defaultname'];  }   
        

    $con->close;
    return $data['typename'];
    }
    $fdd=gen(18);echo $fdd;
    ?>
      

  8.   

    <?php   function muses($typeid) 

    $con = mysql_connect("localhost","admin","seeingyoua"); 
    mysql_select_db("dedecms_ewoka", $con); 
    mysql_query('SET NAMES utf8'); 
    $reult_main=mysql_query("select typename,reid,typedir,defaultname from dede_arctype where id=$typeid",$con); 
      while ($reid_tmp = mysql_fetch_array($reult_main)) 
      { 
    $reid = $reid_tmp['reid']; 
    $data['typename'] = $reid_tmp['typename']; 
    $data['typedir'] = $reid_tmp['typedir']; 
    $data['dfname'] = $reid_tmp['defaultname'];   }  
      $con->close; 
      
      echo "执行返回".$data['typename']." <br />";      //显示信息,检查是否进行了递归...(确实递归了) if ($reid==0) { 
          echo "检查是否已经运行到这里 <br />"; 
          return $reid;                          //经检查,这边没有返回 
      } if ($reid <>0) { 
          muses($reid); 
    }     return $data['typename'] ;                      //这边返回了,但是..值怎么会是..... 

    $fd=muses(18); echo '$fd='.$fd; 
    ?> 
    试试,其实上面的所有递归应是都没有问题的有问题的是你不知道递归的执行顺序
    其次是注意return,不知弟归中return的用法和含义,理论上,如果 前面有一个return了,下面return就没用了
    你可改成echo就没多大问题了