2013-08-28 54 views
0

我已經改變了這個遞歸函數的版本... http://www.phpbuilder.com/articles/databases/mysql/handling-hierarchical-data-in-mysql-and-php.htmlPHP:如何保存數組中的遞歸函數的結果?

我需要的是一種保存在一個數組這個函數的返回值,這樣我可以逆轉數組元素的順序。該函數適用於我,但我需要一種方法來保存值。這裏是你想要這個代碼...

function display_children($category_id, $level) { 
    global $database; 
    $result = mysql_query("SELECT * FROM parents WHERE id_roditelja='$category_id'") or die(mysql_error()); 
    $niz = array(); 
    while ($row = mysql_fetch_array($result)) { 
    echo str_repeat(' ', $level) . $row['naziv'] . "<br/>"; 
    array_push($niz, display_children($row['parent_id'], $level + 1)); 
//this is one way I tried, and I get $niz with exact number of elements but each is null 
//in this $niz array I need to store values of recursion 
    var_dump($niz); 
    } 
} 
+0

chould你轉儲$ niz之外,你的空問題可能是因爲第二個參數給array_push。你的遞歸函數不會返回任何要發送到array_push的值,我的意思是你有很多操作,但末尾沒有值 –

+0

@som:你能解釋爲什麼這不是一個遞歸函數嗎?它自稱?暴徒:你忘了回報$ niz;過了一段時間 – Christoph

+0

對不起,我沒有看到正確的。 – som

回答

1

我想:

function display_children/* <- this must be the same */($category_id, $level) { 
    global $database; 
    $result = mysql_query("SELECT * FROM parents WHERE id_roditelja='$category_id'") or  die(mysql_error()); 
    $niz = array(); 
    while ($row = mysql_fetch_array($result)) { 
    $niz[] = str_repeat(' ', $level) . $row['naziv'] . "<br/>"; // we need to save this 
    $niz = array_merge($niz, /* as this -> */display_children($row['parent_id'], $level + 1)); // array_merge doesn't take a reference so we need to store its result in $niz 
    } 
    return $niz; 
} 
如果你想狀結構使用樹

array_push代替array_merge。 正如沒有人似乎注意到:他的函數不能返回任何沒有返回語句!

+0

也許我們已經注意到了,但是在評論中,因爲多一行,不值得一個完整的答案:) –

+0

同樣的結果,我的方式......再次。我的函數返回產品的名稱,因爲它應該,但我需要它保存在數組中,因爲元素的順序不正確。 – Thug

+0

@微笑你的功能(你如何發佈它)可能會顯示一些東西,但它不會返回任何東西,因爲它缺少一個返回語句!你可以發佈你如何調用你的函數和一個示例輸出嗎? – Christoph