在巢狀選單系統中,每個選單項目都可以有子選單項,它們又可以有自己的子項目。目標是有效地從資料庫中取得並顯示這些嵌套選單層級。
為了實現這一點,我們可以採用一種非遞歸方法,其中涉及:
這是一個示範上述方法的PHP 函數:
<code class="php">function generateMenu($items) { $html = ''; $parent = 0; $parentStack = array(); $children = array(); foreach ($items as $item) { $children[$item['parent_id']][] = $item; } while (($option = each($children[$parent])) || ($parent > 0)) { if (!empty($option)) { // 1) Item with children if (!empty($children[$option['value']['id']])) { $html .= '<li>' . $option['value']['title'] . '</li>'; $html .= '<ul>'; array_push($parentStack, $parent); $parent = $option['value']['id']; } // 2) Item without children else { $html .= '<li>' . $option['value']['title'] . '</li>'; } } // 3) Current parent has no more children else { $html .= '</ul>'; $parent = array_pop($parentStack); } } return $html; }</code>
要使用該函數,首先從資料庫中檢索選單項目並將它們作為數組傳遞給generateMenu() 函數。產生的 HTML 將是一系列嵌套的無序列表,表示分層選單結構。
這種非遞歸方法消除了可能發生的無限循環的風險遞歸,使其成為產生嵌套選單的更穩定、更有效率的解決方案。
以上是如何使用 PHP 和 MySQL 建立無限嵌套選單系統:非遞歸方法?的詳細內容。更多資訊請關注PHP中文網其他相關文章!