使用PHP 和MySQL 建立無限等級的選單
在網站開發中,選單導覽在使用者體驗中扮演著至關重要的作用。然而,建立支援無限級子選單的選單可能具有挑戰性。讓我們深入研究使用 PHP 和 MySQL 實現此功能的綜合方法。
資料庫結構與選單系統
您提到的資料庫結構是表示分層選單系統。每個選單項目都有一個父欄位來建立父子關係。父 ID 0 表示頂級選單項目。
檢索頂層選單
您現有的用於檢索頂層選單的PHP 程式碼是正確的:
<code class="php">$list = $obj->childmenu($parentid); foreach($list as $menu) { echo '<li><a href="#">'.$name.'</a></li>'; }</code>
識別子選單的存在與顯示
您的查詢旨在識別選單項目是否具有子選單並將其顯示在其清單項目中。為此,您需要修改 SQL 查詢和 PHP 程式碼。
最佳化的SQL 查詢
使用單一SQL 查詢,我們可以擷取以下順序訂購的所有選單項目他們的父ID 和位置:
<code class="sql">SELECT id, parent_id, title, link, position FROM menu_item ORDER BY parent_id, position;</code>
改進的PHP 代碼
修訂後的PHP 代碼合併了一個堆疊來跟踪當前菜單級別,並確保有效處理嵌套菜單:
<code class="php">$items = $query_results; // Assuming $query_results contains the result of the SQL query $html = ''; $parent = 0; $parent_stack = array(); foreach ( $items as $item ) { if ( !empty($item['parent_id']) ) { $children[$item['parent_id']][] = $item; } } while ( ( $option = each( $children[$parent] ) ) || ( $parent > 0 ) ) { if ( !empty( $option ) ) { if ( !empty( $children[$option['value']['id']] ) ) { $html .= '<li>' . $option['value']['title'] . '<ul>'; array_push( $parent_stack, $parent ); $parent = $option['value']['id']; } else { $html .= '<li>' . $option['value']['title'] . '</li>'; } } else { $html .= '</ul>'; $parent = array_pop( $parent_stack ); } } echo $html;</code>
此更新的程式碼將有效處理選單結構,為巢狀選單建立HTML 標記,並將它們顯示在各自的清單項目中。
以上是如何使用 PHP 和 MySQL 建立無限等級的選單:逐步指南?的詳細內容。更多資訊請關注PHP中文網其他相關文章!