遍历父数据库项

时间:2017-03-21 15:12:00

标签: php

我有一种情况是让我忙碌的时间比应该更长。我想从数据库表构建一个项目树。请考虑下表:

| id | name    | parent |
|----|---------|--------|
| 1  | Root    | 0      |
| 2  | Child   | 1      |
| 3  | Child 2 | 2      |
| 4  | Child 3 | 3      |

我需要一个递归遍历给定起点的函数,直到没有父符号为止。我认为可行的是以下内容,但它没有。 while循环不会停止为零。

public function getChildren($parent, $output = array()){
     $folder = [select name, parent from table];
     array_push($output, $folder->name);
     $newParent = $folder->parent;
     while($newParent >= 0){
          self::getChildren($newParent, $output);
     }
}

当我为while()构造交换if()/else()循环时,工作是什么,但后来我遇到了返回响应的问题

if($newParent != 0){
     self::getChildren($newParent, $output);
}else{
     return array_reverse($output);
}

因为我在类上下文中需要在构建树之后返回值,所以基于此我假设我需要一个while()循环并在此之后返回响应。但我无法让它发挥作用。

首先我使用了while($newParent <= 0){,但这也没有用。

我的预期结果如下:

print_r(getChildren(3));

// response:
Array
(
    [0] => Root
    [1] => Child
    [2] => Child 2
    [3] => Child 3
)

1 个答案:

答案 0 :(得分:0)

我建议在PHP PDO中使用FETCH_LAZY连接设置。它可能正是您正在寻找的(但是预建和轻量级)。

Manual for Fetch Modes

PHP - PDO DB connection