私はこれを理解しようとしてきましたが、どこにも行きませんでした。誰かが私の救助に来ることができれば幸いです。
私の問題は、隣接リストデータモデルを使用してmysqlで階層データを生成していることです。テーブル(以下を参照)を、各アイテムの連想配列を持つ多次元配列に取得できます。私がやりたいのは、この配列を取得したら、親ID(親アイテムを含む)の下にすべてのノード(子、孫など)を含む別の配列を取得したいです。 php。
MySQLでは、私のテーブルは次のように表示されます。
id name parent_id
1 Electronics 0
2 Televisions 1
3 Portable Electronics 1
4 Tube 2
5 LCD 2
6 Plasma 2
7 Mp3 Players 3
8 CD Players 3
9 2 Way Radios 3
10 Flash 7
このコードを含むすべての行を、これを含む連想配列に取得できます。
$r = mysql_query("SELECT * FROM test ");
$data = array();
while($row = mysql_fetch_assoc($r)) {
$data[] = $row;
}
結果を取得します:
Array
(
[0] => Array
(
[id] => 1
[name] => Electronics
[parent_id] => 0
)
[1] => Array
(
[id] => 2
[name] => Televisions
[parent_id] => 1
)
[2] => Array
(
[id] => 3
[name] => Portable Electronics
[parent_id] => 1
)
[3] => Array
(
[id] => 4
[name] => Tube
[parent_id] => 2
)
[4] => Array
(
[id] => 5
[name] => LCD
[parent_id] => 2
)
[5] => Array
(
[id] => 6
[name] => Plasma
[parent_id] => 2
)
[6] => Array
(
[id] => 7
[name] => Mp3 Players
[parent_id] => 3
)
[7] => Array
(
[id] => 8
[name] => CD Players
[parent_id] => 3
)
[8] => Array
(
[id] => 9
[name] => 2 Way Radios
[parent_id] => 3
)
[9] => Array
(
[id] => 10
[name] => Flash
[parent_id] => 7
)
)
これらの結果を使用して、IDでフィルター処理したいと思います。
たとえば、ポータブルエレクトロニクスの下にある、IDが3のすべてのノードの連想配列が必要だったとします。(コードにidを使用)
次のIDの行を持つ配列を返します。
- 3ポータブル電子機器(選択した親を含める必要があります)
- 7 Mp3プレーヤー(子供)
- 8枚のCDプレーヤー(子供)
- 9双方向ラジオ(子供)
- 10フラッシュ(孫)
Flashに子があった場合、それらも返されます。
したがって、最終結果は上記のような配列を返しますが、これらのアイテムのみが含まれます。
注意:私はツリー構造の多次元配列を作成する関数を求めていません(その解決策はすでにあります)。IDを受け取り、のすべてのアイテムを返す関数fetch_recursive($ id)を作成したいと思います。そのレベルとその下のレベルなど。
お役に立てれば
前もって感謝します