如何使用邻接表方法从分层存储的 SQL 数据创建多维数组?

发布于 2024-07-30 13:11:34 字数 560 浏览 3 评论 0原文

来自 SQL

邻接列表模型的

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

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

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

对象

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

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

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

还有比这更聪明的使用 PHP 数组的方法吗?

Hierarchical Data from SQL

Adjacency List Model

In my model I have a series of objects, each stored with their parent id. I am using the Adjacency list model as my hierarchy method.

All examples of Adjacency list simply output there and then. None try to create a multi dimensional array from the result set.

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

Object

I created an array variable in my class called 'children' and want to add a child object each time I find a child from the db query.

Creating an array within each object and storing the subsequent objects in there feels wrong. Can't I create the array of objects separately? Doing it this way may make it hard to traverse the array when I get it into the view.

I feel like I am I approaching this problem the wrong way?

Is there a smarter way to use PHP arrays than this?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

回梦 2024-08-06 13:11:34

子元素数组不必是类的一部分;也可以是类的一部分。 您始终可以创建一棵临时树,其中一个节点是包含对象及其子对象的散列。 我不懂 PHP,但它看起来像:

{
    object => $row1,
    children => [
        {
            object => $row2,
            children => [ ... ],
        }, {
            object => $row3,
            children => [],
        }
    ]
}

The array of children doesn't have to be part of a class; you can always just make an ad-hoc tree where one node is a hash containing an object and its children. I don't know PHP, but it would look something like:

{
    object => $row1,
    children => [
        {
            object => $row2,
            children => [ ... ],
        }, {
            object => $row3,
            children => [],
        }
    ]
}
魔法少女 2024-08-06 13:11:34

你需要它是一个数组吗? 一种选择是让对象实现如下所示的递归层次结构:

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

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

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

Do you need it to be an array? An option could be to have the objects implement a recursive hierarchical structure like this one:

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

You can add the objects as child and still travel the structure in an array-like fashion.

The documentation on SPL is sparse but it provides some good traversable structures, interfaces and classes. Some good tutorials exist on the web about it.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文