ホームページ >データベース >mysql チュートリアル >データベースの結果を多次元配列に変換して、階層データ構造を表すにはどうすればよいですか?

データベースの結果を多次元配列に変換して、階層データ構造を表すにはどうすればよいですか?

Mary-Kate Olsen
Mary-Kate Olsenオリジナル
2024-11-07 16:23:03953ブラウズ

How can I convert database results into a multidimensional array to represent a hierarchical data structure?

データベース結果の配列への変換

はじめに

この説明は、データベースから階層データ構造を取得し、それを多次元配列に変換することに焦点を当てています。単一のクエリ。目標は、データのツリー構造を表す配列を取得することです。

解決策

データベースからツリー構造を抽出するには、一般的にクロージャ テーブルが使用されます。クロージャ テーブルは、階層内の祖先と子孫の間の関係を記録し、子孫の効率的なクエリを可能にします。

SQL クエリ

ノードの主キーが与えられると、SQL を使用してその子孫をクエリできます。次の手順を使用します:

  1. クロージャ テーブルをプライマリ テーブルと結合して、すべての子孫を検索します。
  2. 必要に応じて、クロージャ テーブルの別のインスタンスを結合して、親情報を含めます。
  3. 深さパラメータに基づいて取得するレベルの数を制限します。
  4. ルート ノードからの距離に基づいて結果を並べ替えます。

後処理

次に、SQL 結果は次の方法で処理されます。

  1. 行は、階層関係に基づいてサブセットに並べ替えられます。
  2. 各行は、コレクションを含む行オブジェクトに変換されます。
  3. 行セット クラスは、それぞれに子が含まれる行のコレクションを表すために使用されます。
  4. 結果のツリーは、ルート ノードから開始してその子を再帰的に追加することによって構築されます。

コード例

PHP では、Zend Framework を使用して、次のコードでプロセスを示します。

// Get taxonomy table instance
$tax = new Taxonomy();

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

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

出力

出力データのツリー構造を表す多次元配列です。

array (
  'tsn' => '180130',
  'completename' => 'Rodentia',
  '_parent' => '179925',
  '_children' => [
    // Child rows...
  ],
)
など

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

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