我'我正在尝试这个很长一段时间了。下面的函数只返回1个结果,因为它应返回3个结果。
我已经检查了数据库,数据库返回的结果很好,这意味着数据库部分没问题,它在函数中某处做错了。
//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 :(得分:2)
您在每次递归调用时都会重新声明$array
,因此每次重新初始化都会重新初始化。尝试在调用generate_uri()
之前声明它并将其作为第二个参数传递:
$array = array();
var_dump(generate_uri(3, $array));
不要忘记将其从函数内部删除。
答案 1 :(得分: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;
}