PHP/MySQL 順序なしリスト メニュー ツリーの構築: 非再帰的な単一データベース クエリのアプローチ
データベース クエリから順序なしリスト メニュー ツリーを構築するのは共通のタスク。通常、データベースに複数回クエリを実行する再帰関数が使用されます。ただし、単一のデータベース クエリを使用すると、より効率的な非再帰的アプローチが可能です。
id、title、parent_id 属性を持つページ オブジェクトの配列が与えられた場合、目標は、次の HTML を生成する関数を作成することです。順序なしリスト メニュー。
解決策:
このソリューションでは次の手順を採用します。
コード:
<code class="php">function has_children($rows, $id) { foreach ($rows as $row) { if ($row['parent_id'] == $id){ return true; } } return false; } function build_menu($rows, $parent=0) { $result = "<ul>"; foreach ($rows as $row) { if ($row['parent_id'] == $parent){ $result.= "<li>{$row['title']}"; if (has_children($rows,$row['id'])) { $result.= build_menu($rows,$row['id']); } $result.= "</li>"; } } $result.= "</ul>"; return $result; }</code>
使用例:
<code class="php">$menu = [ ['id' => 1, 'title' => 'Menu 1', 'parent_id' => null], ... // Additional menu objects ]; echo build_menu($menu); // Outputs the complete menu list</code>
利点:
以上がPHP/MySQL で再帰なしで順序なしリスト メニュー ツリーを構築する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。