Multi level menu with PHP/MySQL(带有 PHP/MySQL 的多级菜单)
问题描述
我正在尝试使用 PHP 创建动态多级菜单,以从 MySQL 数据库中获取数据.我已经设法用这种格式在 php 数组中订购菜单项:
I'm trying to create dynamic multi level menus fetching the data from a MySQL DB, using PHP. I've managed to order the menu items in a php array with this format:
-----------------------
Array
(
[1] => Array
(
[id] => 1
[ubicacion] => top_a
[nivel] => 1
[parent_id] =>
[tipo] => link
[link] => http://www.google.com
[titulo] => Google
[alias] => google_es
[children] => Array
(
[3] => Array
(
[id] => 3
[ubicacion] => top_a
[nivel] => 2
[parent_id] => 1
[tipo] => link
[link] => http://www.gmail.com
[titulo] => Gmail
[alias] => gmail
[children] => Array
(
[4] => Array
(
[id] => 4
[ubicacion] => top_a
[nivel] => 3
[parent_id] => 3
[tipo] => link
[link] => www.inbox.gmail.com
[titulo] => Inbox
[alias] => inbox_gmail
)
)
)
)
)
[2] => Array
(
[id] => 2
[ubicacion] => top_a
[nivel] => 1
[parent_id] =>
[tipo] => link
[link] => http://www.yahoo.com
[titulo] => Yahoo
[alias] => yahoo
)
)
-----------------------
问题是我无法弄清楚如何以适用于 n 级的方式将此数组输出为 HTML 标记.我可以用固定数量的级别来做到这一点:
The problem is that I can't figure out how to output this array as HTML markup in a way that will work with n levels. I can do it with a fixed number of levels like this:
foreach($menu_array as $menu) {
echo "<li><a href='{$menu['link']}'>{$menu['titulo']}</a>";
if (array_key_exists('children',$menu)) {
echo "<ul>";
foreach ($menu['children'] as $child_menu) {
echo "<li><a href='{$child_menu['link']}'>{$child_menu['titulo']}</a>";
if (array_key_exists('children',$child_menu)) {
echo "<ul>";
foreach ($child_menu['children'] as $child2_menu) {
echo "<li><a href='{$child2_menu['link']}'>{$child2_menu['titulo']}</a>";
}
echo "</ul>";
}
}
echo "</ul>";
}
echo "</li>";
}
但这仅适用于 3 个级别,我知道应该有办法解决这个问题,我知道我不是第一个遇到多维数组的 HTML 输出问题的人.
But this only works for 3 levels, and I know there should be a way to solve this issue, I know I'm not the first one facing a problem with HTML output of a multidimensional array.
推荐答案
你可以只使用一点递归来让你进入更多层次.
You can just use a little bit of recursion to get you to more levels.
function echo_menu($menu_array) {
//go through each top level menu item
foreach($menu_array as $menu) {
echo "<li><a href='{$menu['link']}'>{$menu['titulo']}</a>";
//see if this menu has children
if(array_key_exists('children', $menu)) {
echo '<ul>';
//echo the child menu
echo_menu($menu['children']);
echo '</ul>';
}
echo '</li>';
}
}
echo '<ul>';
echo_menu($menu_array);
echo '</ul>';
这适用于您想要的任意数量的子级别.
This will work for any number of child levels you'd like.
这篇关于带有 PHP/MySQL 的多级菜单的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:带有 PHP/MySQL 的多级菜单
基础教程推荐
- HTTP 与 FTP 上传 2021-01-01
- 找不到类“AppHttpControllersDB",我也无法使用新模型 2022-01-01
- Doctrine 2 - 在多对多关系中记录更改 2022-01-01
- 在 yii2 中迁移时出现异常“找不到驱动程序" 2022-01-01
- PHP 守护进程/worker 环境 2022-01-01
- 在 CakePHP 2.0 中使用 Html Helper 时未定义的变量 2021-01-01
- 如何在 Symfony 和 Doctrine 中实现多对多和一对多? 2022-01-01
- 如何在 XAMPP 上启用 mysqli? 2021-01-01
- phpmyadmin 错误“#1062 - 密钥 1 的重复条目‘1’" 2022-01-01
- 使用 PDO 转义列名 2021-01-01