1

我有这样的类别层次结构。

  • 721 父母是 235
  • 235 父母是 201
  • 201 父母是 1
  • 1 个父母是 0

0 是根类别 id,我正在尝试构建一个输入叶 id 721 的函数,获取 721、235、201、1 的完整路径 id

public function getPath($inputId = 0, $idList=array())
{       
    $sql ="SELECT * FROM hierarchy where id='{$inputId}'";
    $result = $this->db->fetchAll($sql);

    if($result){
        $currentId = $result[0]["id"];
        $parentId = $result[0]["parent_id"];

        $idList[] = $currentId;

        if ($parentId !=0){
           $this->getPath($parentId, $idList);
        }else{
            //var_dump($idList);
            return $idList;
        }
    }

}

我可以在上面的 var_dump 部分看到正确的结果,但是当我从另一个类中使用这个函数时,它返回 null,就像这样 $data = $whateveHelper->getPath('721');

有人可以帮忙吗?

谢谢

4

2 回答 2

3

你只需要改变这个:

if ($parentId !=0){
    $this->getPath($parentId, $idList);
}

对此:

if ($parentId !=0){
    return $this->getPath($parentId, $idList);
}

然后您需要删除 else 子句并移动“return $idList;” 行到你的函数的底部,所以它总是被返回。上面的代码只会在 $parentId 为 0 的情况下返回 $idList。但是,如果您以递归方式调用它,则需要该函数始终返回某些内容。

我为您的整个功能推荐了一些类似的东西:

public function getPath($inputId = 0, $idList=array())
{       
    $sql ="SELECT * FROM hierarchy where id='{$inputId}'";
    $result = $this->db->fetchAll($sql);

    if($result){
        $currentId = $result[0]["id"];
        $parentId = $result[0]["parent_id"];

        $idList[] = $currentId;

        if ($parentId !=0){
           return $this->getPath($parentId, $idList);
        }
    }
    return $idList;
}

让我知道这是否适合你。

于 2012-06-08T20:51:01.040 回答
1

该行:

$this->getPath($parentId, $idList);

需要是

return $this->getPath($parentId, $idList);
于 2012-06-08T20:45:32.407 回答