どのようにして隣接リスト方式を使用して階層的に保存されたSQLデータから多次元配列を作成できますか?
-
16-09-2019 - |
質問
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のドキュメントはまばらであるが、それはいくつかの良い通行可能な構造、インタフェースとクラスを提供します。いくつかの良いチュートリアルはそれについてウェブ上に存在します。