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

子の配列はクラスの一部である必要はありません。1 つのノードがオブジェクトとその子を含むハッシュであるアドホック ツリーをいつでも作成できます。PHPはわかりませんが、次のようになります。

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