2015-09-05 97 views
0

我正在嘗試這個很長一段時間了。下面的函數只返回1個結果,因爲它應該返回3個結果。函數只返回1個數組的結果

我檢查了數據庫,數據庫返回的結果在一個循環罰款,這意味着數據庫部分是好的,它的功能,在做錯了的地方。

//function that generates the URI from the database 
function generate_uri($menu_id = 0, $array = ''){ 
    global $db; 
    $array = array(); 
    if(!empty($menu_id)){ 
     $db->where('menu_id', $menu_id); 
     $menu = $db->ObjectBuilder()->getOne('menu'); 
     $menu_parent = $menu->menu_parent; 
     $menu_slug = $menu->menu_slug; 
     $array[] = $menu_slug; 
     generate_uri($menu_parent, $array); 
    } 
    return $array; 
} 

//Calling the function with a parameter of 3 
var_dump(generate_uri(3)); 

輸出

array(1) { [0]=> string(15) "photo-gallery-1" } 

應迴歸

array(1) { [0]=> string(15) "photo-gallery-1" [1]=> string(12) "photo-gallery" [2]=> string(9) "resources"} 
+0

難道ü嘗試這個的print_r(generate_uri(3)); ?而不是var_dump – Grald

+0

@Grald是的,我已經嘗試過,仍然是相同的結果。 –

回答

1

每次調用函數時,您可以設置$array空: $array = array(); 另一個問題是,你沒有得到函數的if語句裏面的回報。改變這一行:

generate_uri($menu_parent, $array); 

要這樣:

$array = generate_uri($menu_parent, $array); 

所以,函數應該是這樣的:

function generate_uri($menu_id = 0, $array = '') { 
    global $db; 

    if (!empty($menu_id)) { 
    $db->where('menu_id', $menu_id); 
    $menu = $db->ObjectBuilder()->getOne('menu'); 
    $menu_parent = $menu->menu_parent; 
    $menu_slug = $menu->menu_slug; 
    $array[] = $menu_slug; 
    $array = generate_uri($menu_parent, $array); 
    } 

    return $array; 
} 
+0

非常感謝你,你真棒。 –

2

你在每次遞歸調用重新聲明$array,所以它就會每次都重新初始化。嘗試調用generate_uri()並把它當作第二個參數之前,宣佈它:

$array = array(); 
var_dump(generate_uri(3, $array)); 

而且不要忘了,從函數內將其刪除。