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 部分で正しい結果を確認できますが、別のクラスからこの関数を使用すると、この $data = $whateveHelper->getPath('721'); のように null が返されます。

誰でも助けることができますか?

ありがとう

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 に答える