2010-09-15 193 views
0

我有一个返回值的递归函数。PHP函数不返回值

public function getparent ($user) 
    { 
     $referrer=''; $pos=0;$this->setFieldNames(); 
     $result=mysql_query("select * FROM ". $this->dbtablename ." WHERE ".$this->id_field . " = '$user'", $this->dbConnectionID); 
     while($row=mysql_fetch_array($result, MYSQL_ASSOC)) 
     { 
      $referrer=$row['referrer']; 
      $export=array(); 
      foreach($this->tablefields as $val){ 
       $export[$val] = $row[$val]; 
      } 
     } 
     if($referrer != "0" && $referrer != "") 
     { 
      $result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->id_field . " ='$referrer'", $this->dbConnectionID); 
      while($row2=mysql_fetch_array($result2, MYSQL_ASSOC)) 
      { 
       $export=array(); 
       foreach($this->tablefields as $val){ 
        $export[$val] = $row2[$val]; 
       } 
      } 
     } 

     $result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->parent_id_field . " ='$referrer' order by id asc", $this->dbConnectionID); 
     while($row2=mysql_fetch_array($result2, MYSQL_ASSOC)) 
     { 
      $usernames[]=$row2['username']; 
     } 
     $pos=array_search($user, $usernames); 
     if($referrer == '0' || $pos >=1) 
     {echo 'xxxxxxx'; 
      return $export; 
     } 
     else 
     { 
      $this->getparent($referrer); 
     } 
    } 

看来,当$引荐为零它不返回任何值,但它呼应“XXXXXXX”。有什么问题可以解决!?

回答

2

有一个问题之前声明$出口:

while($row=mysql_fetch_array($result, MYSQL_ASSOC)) 
    { 
     $referrer=$row['referrer']; 
     $export=array(); 
     foreach($this->tablefields as $val){ 
      $export[$val] = $row[$val]; 
     } 
    } 

要替换在每个迭代上的出口阵列 - 是你的意图是什么?除最后一行外,所有数据都被扔掉了。然后,你在这一块做一遍:

if($referrer != "0" && $referrer != "") 
    { 
     $result2=mysql_query("select * from " . $this->dbtablename . " where " . $this->id_field . " ='$referrer'", $this->dbConnectionID); 
     while($row2=mysql_fetch_array($result2, MYSQL_ASSOC)) 
     { 
      $export=array(); 
      foreach($this->tablefields as $val){ 
       $export[$val] = $row2[$val]; 
      } 
     } 
    } 

你在哪里(一)只得到数据的最后一行和(b)覆盖从第一个块中的数据(也许是后者的话)。

最后如果你打这个块(引荐没有零到代码中的第一次):

else 
    { 
     $this->getparent($referrer); 
    } 

你永远不reutrn从递归调用的值,它应该是:

else 
    { 
     return $this->getparent($referrer); 
    } 

我怀疑是实际问题。但是我必须质疑这种递归方法是否最好,而不是迭代方法。

+0

我覆盖的$ export数组实际上是有意的,尽管每个while循环只返回一行。你最后的建议做了魔法,但我认为它的强制性必须在此时返回一个值。请亲切地向我解释迭代方法。 – 2010-09-17 08:35:46

0

尝试while循环

+0

我刚刚做到了,我从while循环中删除了声明并放在顶端,但它没有工作,我甚至试图返回一个静态字符串,但它没有返回任何东西。 – 2010-09-15 11:13:34