2010-09-15 4 views
0

J'ai une fonction récursive qui renvoie une valeur.La fonction PHP ne renvoie pas de valeur

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); 
     } 
    } 

Il semble que lorsque le referrer $ est égal à zéro, il ne marche pas retourner une valeur, mais il fait écho « xxxxxxx ». Quel peut être le problème!?

Répondre

2

Il y a un problème avec:

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

Vous remplacez votre tableau d'exportation à chaque itération - est que votre intention? Les données sont jetées pour tous sauf la dernière rangée. Ensuite, vous le faites à nouveau dans ce bloc:

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]; 
      } 
     } 
    } 

Où vous (a) seulement obtenir la dernière ligne de données et (b) remplaçant les données du premier bloc (peut-être que celui-ci est souhaitée).

Et enfin, si vous frappez jamais ce bloc (referrer est nul pas la première fois dans votre code):

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

Vous ne reutrn une valeur de l'appel récursif, il devrait être:

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

Ce que je soupçonne est le problème réel. Mais je dois me demander si cette approche récursive est la meilleure, plutôt qu'une approche itérative.

+0

Le tableau $ export que je remplace est en fait intentionnel, bien que chaque boucle while ne renvoie qu'une seule ligne. Votre dernière suggestion a fait la magie, mais je pensais que son nt obligatoire, il doit retourner une valeur à ce moment-là. SVP, veuillez m'expliquer l'approche itérative. –

0

Essayez de déclarer l'exportation de $ avant que la boucle while

+0

Je viens de le faire, j'ai enlevé la déclaration des boucles while et mis sur le dessus, mais cela n'a pas fonctionné, j'ai même essayé de retourner une chaîne statique mais il n'a rien retourné. –

Questions connexes