2015-09-05 46 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)); 

而且不要忘了,从函数内将其删除。