PHP および MySQL のカテゴリ階層
一般的なデータベース構造では、カテゴリは階層的に編成され、親カテゴリには子カテゴリが含まれます。 。 MySQL データベースからこの階層を取得するのは、困難な作業となる場合があります。この記事では、PHP と MySQL を使用してカテゴリ階層を効果的に構築する方法について説明します。
隣接リスト モデル
隣接リスト モデルは、親子関係を格納することで階層データを表します。単一のテーブル。テーブルの各行には、カテゴリの ID とその親の ID が含まれています。このモデルでは、単一の SQL クエリを使用してカテゴリ ツリーを効率的に取得できます。
階層の生成
カテゴリ階層を生成するには、次の PHP コードを利用します。
<code class="php">$refs = array(); $list = array(); $sql = "SELECT item_id, parent_id, name FROM items ORDER BY name"; $result = $pdo->query($sql); foreach ($result as $row) { $ref = &$refs[$row['item_id']]; $ref['parent_id'] = $row['parent_id']; $ref['name'] = $row['name']; if ($row['parent_id'] == 0) { $list[$row['item_id']] = &$ref; } else { $refs[$row['parent_id']]['children'][$row['item_id']] = &$ref; } }</code>
このコードは結果セットを反復処理し、配列内の各カテゴリへの参照を作成します。親子関係を使用して、階層を表す多次元配列を構築します。
出力リストの作成
階層を表示するには、再帰関数を使用します。
<code class="php">function toUL(array $array) { $html = '<ul>' . PHP_EOL; foreach ($array as $value) { $html .= '<li>' . $value['name']; if (!empty($value['children'])) { $html .= toUL($value['children']); } $html .= '</li>' . PHP_EOL; } $html .= '</ul>' . PHP_EOL; return $html; }</code>
この関数は多次元配列を受け取り、カテゴリ階層を表す HTML の順序なしリストを生成します。階層を再帰的に横断し、必要に応じてネストされたリストを作成します。
以上がPHP と MySQL でカテゴリ階層を構築するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。