2012-02-24 36 views
0

バイナリツリーをブラウズするとき、再帰関数の配列を返したいと思います。特に、条件に合致するバイナリツリーの要素(if文)が配列に挿入されるとき。結局のところ、要素はすべての配列を返します。私のコードは動作しません!再帰配列からの戻り値 -

tree_view(false,$conn,$arr["user_id"]); 

は私がアレイとの両方を含む推薦:

function tree_view($clear_static = false,$conn,$index) 
{ 
    static $count = 0; 
    if ($clear_static) { 
     $count = 0; 
    } 
    $q=mysql_query("SELECT user_id FROM thanhvien WHERE gioithieu='".$index."'",$conn); 

    while($arr=mysql_fetch_assoc($q)) 
    { 
     if (truongban($conn,$arr["user_id"],1)==true){ 
      $mang[$count]=$arr["user_id"]; 
      $count++; 
     } 
     tree_view(false,$conn,$arr["user_id"]); 
    } 
    return $mang; 
} 
$mang1=tree_view (true,$conn,anloc); 
print_r($mang1); 
+0

は、あなたは本当に「再帰関数の配列」を返すようにしたいですか?単純なデータだけでなく、 – SteAp

+0

はい!私は実際に配列に私の関数を返します! Plz help me – hitachitellme

+0

関数の配列ではなく、関数AM配列を返したいとします。 – SteAp

答えて

1

まあ、私が見る問題は、あなたがこの行にここで、再帰呼び出しから返された配列で何もしていないことですメソッドのパラメータを数えます(静的変数を使用することはお勧めできません)。だから、それはこのようになります:

function tree_view($conn, $index, $mang, &$count) 
{ 
    $q=mysql_query("SELECT user_id FROM thanhvien WHERE gioithieu='".$index."'",$conn); 

    while($arr=mysql_fetch_assoc($q)) 
    { 
     if (truongban($conn,$arr["user_id"],1)==true){ 
      $mang[$count]=$arr["user_id"]; 
      $count++; 
     } 
     tree_view($conn,$arr["user_id"], $mang, $count); 
    } 
    return $mang; 
} 

そして、あなたはこのようなあなたのメソッドを呼び出します:

$mang1[0] = ""; 
$count = 0; 
$mang1 = tree_view ($conn, anloc, $mang1, $count); print_r($mang1); 
+0

ありがとうございます!私はあなたのやり方をしようとしていましたが、Array([0] => thidotn1)しか表示されません。正確に表示する必要がある場合は、要素10個 – hitachitellme

+0

残念ですが、参考にして$ countを渡すのを忘れてしまいました。私はコードを編集し、今すぐ動作するはずです。 –

+0

あなたのコードを編集します。 "Array([0] => [9] => thidotn1)"というプロンプトが表示されます。助けてくれてありがとう – hitachitellme

0

まず$mang初期化されていませんが、そうでなければなりません:

代わり
// Always initialize variables - good style 
    $mang = array(); 

この醜い$ count変数を渡すだけで、新しく発見されたデータを追加するだけです:

// Will append the right side value as a new last element to $mang 
    $mang[] = $arr["user_id"]; 

次に、あなたは変数$anlocに合格する必要があります。

$mang1=tree_view (true, $conn, $anloc); 

このバージョンでは、より良い仕事かもしれません:

function tree_view($conn, $index, $mang) { 

    $q=mysql_query( 'SELECT user_id ' 
        . ' FROM thanhvien ' 
        . ' WHERE gioithieu = "' . mysql_real_escape_string ($index) . '"', 
        $conn 
       ); 

    while($arr = mysql_fetch_assoc($q)) { 

     // better compare type-safe 
     if (true === truongban($conn, $arr["user_id"], 1)){ 

      // append found element 
      $mang[ ] = $arr["user_id"]; 

     } 

     tree_view($conn, $arr["user_id"], $mang); 

    } 

    return $mang; 

} // tree_view