使用 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中文网其他相关文章!