使PHP方法运行直到满足条件

时间:2012-03-05 13:53:27

标签: php oop pdo

我有一个包含三列的表:idrefcatName。每一行都包含一个可以作为子类别的类别;如果是,则ref列引用主类别的id。当然,这种方法可以确保您可以创建多个子类别。

现在我想为包含其所有父母的catName的每个类别创建一个网址。

private function getCatUrl($cat, $ur = array()){
       $sql = "SELECT * FROM shop_cat WHERE id = :id LIMIT 1";
       $st = $this->db->prepare($sql);
       $st->bindParam('id', $cat, PDO::PARAM_INT);
       $st->execute();

       $rij = $st->Fetch();
       $ur[] = urlencode($rij['naam']);

       if($rij['ref'] == 0){
           //Done, I've reached the top parent;
           return implode('/',$ur);

       }else{
           //there is a parent/reference above this level
           //getting there
           $this->getCatUrl($rij['ref'], $ur);

       }

   }

不知何故,这只会为顶级父级产生$ ur,而不会为子级产生$ ur。 我做错了什么?

数据库样本:

id  ref catName
1   0   GroundFloor
4   1   Portal
5   1   Stairs

2   0   FirstFloor
6   2   DiningArea
12  6   Chair
7   2   Toilet   
9   2   SittingRoom
10  9   Couch
11  9   Dresser

3   0   Roof
8   3   LoungeChair

2 个答案:

答案 0 :(得分:0)

错误是你没有确保当递归停止时,结果“冒泡”调用堆栈,直到最后第一次调用函数返回给调用者。在代码中:

return $this->getCatUrl($rij['ref'], $ur); // add the return!

答案 1 :(得分:0)

你做错了。

我建议您查看闭包表[1] [2] [3],并阅读SQL Antipatterns书(第二章介绍树)。< / p>