使用PHP 和MySQL 建立無限級選單
要建立具有多個層級和子選單的複雜選單,常見的方法是利用資料庫組織菜單項目的結構。在這種結構中,頂級選單的父級 ID 通常為 0,而子選單則指派其父級選單的 ID。
當您需要遞歸檢查子選單並在各自的子選單中顯示它們時,就會出現一個挑戰列出項目。以下是使用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中文網其他相關文章!