PHP と MySQL を使用した無制限レベルのメニューの構築
複数のレベルとサブメニューを持つ複雑なメニューを構築するには、一般的なアプローチとしてデータベースを利用します。メニュー項目を整理するための構造。このような構造では、通常、トップレベルのメニューの親 ID は 0 ですが、サブメニューには親メニューの ID が割り当てられます。
サブメニューを再帰的にチェックし、それぞれのメニュー内にサブメニューを表示する必要がある場合、1 つの課題が発生します。リスト項目。 PHP と MySQL を使用してこれを実現する方法は次のとおりです。
MySQL クエリ:
SELECT id, parent_id, name, link, position FROM menu_item ORDER BY parent_id, position;
このクエリは、すべてのメニュー項目を親子に基づいて階層順序で取得します。
PHP 実装:
<code class="php">$html = ''; $parent = 0; // Starting with the top-level menu $parent_stack = array(); // Keeps track of parent menu IDs // Map menu items by their parent ID $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while ( // If there are more children at the current parent level ($option = each($children[$parent])) || // Or if we need to backtrack to a previous parent level ($parent > 0) ) { if (!empty($option)) { // Handle menu items with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['name'] . '</li>'; $html .= '<ul class="submenu">'; array_push($parent_stack, $parent); // Push current parent ID to the stack $parent = $option['value']['id']; // Set current parent to the current menu item's ID } // Handle menu items without children else { $html .= '<li>' . $option['value']['name'] . '</li>'; } } else { // Backtrack to the previous menu level $html .= '</ul>'; $parent = array_pop($parent_stack); // Pop the last parent ID from the stack } } // Output the resulting HTML echo $html;</code>
説明:
このアプローチは、無制限のレベルのサブメニューを持つメニューを構築する柔軟かつ効率的な方法を提供します。再帰で発生する可能性のある無限ループのリスクはありません。
以上がPHP と MySQL を使用して無制限のレベルのメニューを構築する方法: 再帰的ソリューション?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。