function build_path($cid)
{
static $fr=array();
$DB = new MySQLTable;
$DB->TblName = 'shop_categories';
$where['cat_id']['='] = $cid;
$res = $DB->Select('cat_id,cat_name,cat_parent', $where);
if($res !== false)
{
$pid = mysql_fetch_array($res);
if($pid['cat_parent'] !== "0")
{
$fr[] = $pid['cat_id'];
build_path($pid['cat_parent']);
} else {
$fr[] = $cid;
$fr = array_reverse($fr);
print_r($fr);
return $fr;
}
}
}
print_r(build_path(100));
为什么print_r在函数中工作,但第二个print_r返回NULL?
答案 0 :(得分:4)
通常,要使递归函数起作用,您需要在调用自身时返回一些东西。
在第一个嵌套if块中尝试此操作:
return build_path($pid['cat_parent']);
答案 1 :(得分:2)
仅供参考,如果您使用各种方法之一在数据库中存储分层数据,则无需为N级层次结构编写递归函数或执行N个查询。
答案 2 :(得分:0)
递归函数不能使用static
通过调用传递数据 - 而是使用参数。
为什么你需要这一行:
if($res !== false)
...
答案 3 :(得分:0)
而不是第14行中的build_path($pid['cat_parent']);
使用return build_path($pid['cat_parent']);
。