どのようにして隣接リスト方式を使用して階層的に保存されたSQLデータから多次元配列を作成できますか?

StackOverflow https://stackoverflow.com/questions/1273972

質問

SQLからの階層データ

隣接リストモデル

私のモデルでは、私は、オブジェクト、親IDに格納された各シリーズを持っています。私は階層方式として、隣接リストモデルを使用しています。

単に出力があり、その後、隣接リストのすべての例を。いずれも結果セットから多次元配列を作成しようとしません。

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

オブジェクト

私は「子供と子オブジェクト私は、DBのクエリから子供を見つけるたびに、追加したいと呼ばれる私のクラスの配列変数を作成します。

各オブジェクト内の配列を作成し、間違って感じで、その後のオブジェクトを格納します。私は別にオブジェクトの配列を作成することができませんか?このようにそれを行うと私はビューにそれを得るとき、それはハード配列を横断することがあります。

私はこの問題に間違った方法に近づいていますように私は感じる?

これよりもPHPの配列を使用する、よりスマートな方法はありますか?

役に立ちましたか?

解決

子供の配列は、クラスの一部である必要はありません。あなたは常に1つのノードだけが、オブジェクトとその子を含むハッシュであるアドホックツリーを作ることができます。私はPHPを知らないが、それは次のようになります:

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

他のヒント

あなたはそれが配列である必要がありますか?オプションは、オブジェクトが、このような再帰的な階層構造を実装持っている可能性があります:

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

あなたは子供のようにオブジェクトを追加し、まだ、アレイ状に構造を旅行することができます。

SPLのドキュメントはまばらであるが、それはいくつかの良い通行可能な構造、インタフェースとクラスを提供します。いくつかの良いチュートリアルはそれについてウェブ上に存在します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top