递归PHP函数不返回结果

时间:2015-04-07 17:57:29

标签: php mysql recursion

只是一个基于简单数据库表构建面包屑的简单函数,其中有列:

id, parent, title

父母"列可以是0表示顶级,或者" id"子类别的另一行(无限深度)。我试图做的就是有一个功能,可以帮助我从它构建面包屑,从" id"我指定的最底层类别,并一直到顶级父级。这就是我所拥有的:

    function getCategoryParents($id=0, $out=array()) {
        $id = (int)$id;
        if ($id > 0) {
            $query = "SELECT * FROM `" .$this->tables['categories']. "` WHERE (`id`=" .$id. ")";
            $cat = sqlfetch(sqlquery($query));
            array_push($out, $cat);
            if ($cat['parent']) {
                $this->getCategoryParents($cat['parent'], $out);
            } else {
                return $out;
            }
        } else {
            return $out;
        }
    }

但它没有返回任何东西。但是,如果我从函数中执行print_r($ out)而不是return,例如:

            if ($cat['parent']) {
                $this->getCategoryParents($cat['parent'], $out);
            } else {
                echo print_r($out);
            }

它输出数组就好了。但我需要能够实际使用数组,所以我需要从函数返回它。我确定我错过了一些非常小的东西,但我无法理解我的生活!

另外,我不想做一个全局变量,并且还需要初始函数调用中指定的类别id的信息作为数组的一部分(正如我试图做的那样)。 / p>

1 个答案:

答案 0 :(得分:0)

根据建议,这是最终的工作:

    function getCategoryParents($id=0) {
        $out = array();
        $id = (int)$id;
        if ($id > 0) {
            $query = "SELECT * FROM `" .$this->tables['categories']. "` WHERE (`id`=" .$id. ")";
            $cat = sqlfetch(sqlquery($query));
            array_push($out, $cat);
            if ($cat['parent']) {
                $out = array_merge($out, $this->getCategoryParents($cat['parent']));
            }
        }
        return $out;
    }