3

来自 SQL 的分层数据

邻接表模型

在我的模型中,我有一系列对象,每个对象都与其父 ID 一起存储。我使用邻接列表模型作为我的层次结构方法。

邻接列表的所有示例都只是在那里输出。没有人尝试从结果集中创建多维数组。

---------------
| id | parent |
---------------
| 1  | NULL   |
| 2  | 1      |
| 3  | 1      |
| 4  | 2      |
| 5  | 2      |
| 6  | 5      |
---------------

目的

我在我的类中创建了一个名为“children”的数组变量,并且每次从 db 查询中找到一个子对象时都想添加一个子对象。

在每个对象中创建一个数组并在其中存储后续对象感觉是错误的。我不能单独创建对象数组吗?当我将数组放入视图时,这样做可能会使数组难以遍历。

我觉得我以错误的方式处理这个问题?

有没有比这更聪明的方法来使用 PHP 数组?

4

2 回答 2

1

你需要它是一个数组吗?一种选择可能是让对象实现这样的递归层次结构:

http://www.php.net/~helly/php/ext/spl/classRecursiveArrayIterator.html

您可以将对象添加为子对象,并且仍然以类似数组的方式遍历结构。

SPL 的文档很少,但它提供了一些很好的可遍历结构、接口和类。网上有一些很好的教程。

于 2009-08-13T21:58:22.300 回答
1

孩子的数组不必是类的一部分;你总是可以只创建一个临时树,其中一个节点是一个包含对象及其子对象的哈希。我不知道 PHP,但它看起来像:

{
    object => $row1,
    children => [
        {
            object => $row2,
            children => [ ... ],
        }, {
            object => $row3,
            children => [],
        }
    ]
}
于 2009-08-13T22:22:12.257 回答