2012-02-24 63 views
0

瀏覽二叉樹時,我想返回一個遞歸函數數組。特別是當二進制樹中的元素到達條件(if語句)被插入到數組中時。畢竟,該元素返回所有的數組。我的代碼不工作!??從遞歸返回數組--PHP

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 2012-02-25 00:30:28

+0

是的!即時通訊真的返回我的功能陣列! Plz幫我 – hitachitellme 2012-02-25 11:10:34

+0

你想返回你的函數AM數組,而不是一組函數。 – SteAp 2012-02-25 14:28:37

回答

1

嗯,我看到的問題是,你沒有做任何事情與陣列從遞歸調用返回,在這裏這條線:

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

我會建議包括陣列和兩個依靠方法參數(不推薦使用靜態變量)。因此,這將是這樣的:

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 2012-02-24 06:18:48

+0

糟糕,對不起,我忘記了通過參考$ count。我編輯了代碼,現在應該可以工作。 – 2012-02-24 16:34:18

+0

當我編輯你的代碼。它顯示「Array([0] => [9] => thidotn1)」用什麼來表達它!謝謝你的幫助 – hitachitellme 2012-02-25 08:38:25

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