ホームページ  >  記事  >  データベース  >  データベースの結果を階層配列オブジェクトに変換するにはどうすればよいですか?

データベースの結果を階層配列オブジェクトに変換するにはどうすればよいですか?

Barbara Streisand
Barbara Streisandオリジナル
2024-11-06 17:04:03649ブラウズ

How to Convert Database Results into Hierarchical Array Objects?

データベース結果の階層配列オブジェクトへの変換

クロージャ テーブルベースの階層の実装

階層データを効率的に表現するには、クロージャ テーブルの使用を検討してください。このコンテキストでは、クロージャー テーブルはツリー構造の祖先と子孫の間の関係を維持し、階層の取得と表現を効率的にします。

階層データのクエリ

ツリー構造をクエリするには、次のようにします。特定のノードの子孫を階層内のレベルとともに取得する SQL クエリを実行できます。指定したレベルまでの子孫を取得するクエリの例を次に示します。

SELECT d.*, p.a AS '_parent'
FROM longnames AS a
JOIN closure AS c ON (c.a = a.tsn)
JOIN longnames AS d ON (c.d = d.tsn)
LEFT OUTER JOIN closure AS p ON (p.d = d.tsn AND p.l = 1)
WHERE a.tsn = ? AND c.l <= ?
ORDER BY c.l;

クエリ結果の処理

クエリ結果が取得されたら、それらを処理して階層配列構造を作成できます。これには、行を階層別に並べ替え、それに応じてグループ化し、データと子配列の両方を含むオブジェクトとしてノードを含む配列を作成することが含まれます。

カスタム行オブジェクト

配列構造を拡張するには、行データの連想配列とその子の Rowset オブジェクトを含むカスタム Row オブジェクト。リーフ ノードの子の Rowset は空です。

toArrayDeep() メソッド

カスタム クラスには、データ コンテンツを再帰的に単純な配列に変換する toArrayDeep() のようなメソッドを含めることもでき、簡単なデータ エクスポートを可能にします。 .

使用例

このシステムを使用するには、まず分類テーブル データ ゲートウェイのインスタンスを取得し、次に目的のツリー構造をフェッチします。

// Get an instance of the taxonomy table data gateway
$tax = new Taxonomy();

// Query tree starting at Rodentia (id 180130), to a depth of 2
$tree = $tax->fetchTree(180130, 2);

// Dump out the array
var_export($tree->toArrayDeep());

追加注

各パスの深さを決定するには、新しいノードをクロージャ テーブルに挿入し、階層内の追加場所に基づいて適切なレベルを計算します。 LAST_INSERT_ID() 関数は、新しく挿入されたノードの ID を取得するのに役立ちます。

以上がデータベースの結果を階層配列オブジェクトに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。