2012-03-23 18 views
0

私はデータベースから値を取得するために再帰関数を使用していますが、私のコードでは最初のレコードしか返しません。すべての作業が完了したらどこに戻り関数を返すべきですか?PHPの再帰関数から値を返す場所

function sidebar_sub_sub($id) 
{ 
    $sql="select subcatagory_id,subcatagory_name,haschild,parent from subcatagory where parent=".$id.""; 
    $query=mysql_query($sql); 
    $resultset=array(); 

    if(mysql_num_rows($query)) 
     { 
      while($result=mysql_fetch_assoc($query)) 
      {  
       array_push($resultset,$result); 
       if($result['haschild']) 
       { 
        $sb=sidebar_sub_sub($result['subcatagory_id']); 
       }    

      } 

     } 
     return $resultset;    
} 
+0

再帰を理解するには、最初に再帰を理解する必要があります。ああ、信頼して、私は再帰関数やループでデータベースクエリを送信したくない**! – ThiefMaster

答えて

0

あなたはsidebar_sub_sub()の結果を$ sbに保存します。しかし、この変数は何もしません。

代わりにarray_push($resultset, sidebar_sub_sub())を実行できます。このようにして、再帰のスタック全体を返します。

0

id、name、およびparent_idの3つのフィールドしかないカテゴリテーブルに使用した以下のスクリプトを試してみてください。それはあなたのために働くかもしれません。

$resultset=array(); 
function sidebar_sub_sub($id) 
{ 
    global $resultset; 
    $sql="select id,name,parent_id from categories where parent_id=".$id."";  
    $query=mysql_query($sql); 

    if(mysql_num_rows($query)) 
    { 
     while($result=mysql_fetch_assoc($query)) 
     { 
      array_push($resultset,$result);    
      if($result['parent_id']>0){ 
       sidebar_sub_sub($result['id']); 
      } 
     } 

    } 
    return $resultset; 
} 
$result = sidebar_sub_sub(1); 
+0

グローバル変数を使用するのは良いことではありません! –

+0

@RamilAmrあなたは上記の質問に対する解決策を達成する他の方法をお勧めしますか? – neeraj