php
  • recursion
  • category
  • 2012-06-08 128 views 1 likes 
    1

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

    • 721父235
    • 235父201
    • 201父1
    • 1亲本是0

    0是根类别ID,我试图建立一个功能输入叶编号721,获得完整路径编号721,235,201,1

    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');

    任何人都可以帮忙吗?

    感谢

    +2

    你对'getPath'的递归调用返回的值没有做任何事情。 – Gumbo

    +0

    根据您的数据库,您可能有扩展可用于树/图数据。同样的,如果你打算在树上工作,存储过程对你来说可能是有价值的。 –

    回答

    1

    行:

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

    需要被

    return $this->getPath($parentId, $idList); 
    
    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; 
    } 
    

    让我知道这是否为你的作品。

    +0

    是的,你是对的,我不能相信我错过了那部分。非常感谢您在这里的帮助! – user1377324

    相关问题