如何返回静态变量PHP

时间:2010-06-14 22:49:49

标签: php hierarchical-data

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?

4 个答案:

答案 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']);