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 的多级菜单


- openssl_digest vs hash vs hash_hmac?盐与盐的区别HMAC? 2022-01-01
- Laravel 5:Model.php 中的 MassAssignmentException 2021-01-01
- PHP foreach() 与数组中的数组? 2022-01-01
- PHP - if 语句中的倒序 2021-01-01
- Oracle 即时客户端 DYLD_LIBRARY_PATH 错误 2022-01-01
- 使用 GD 和 libjpeg 支持编译 PHP 2022-01-01
- 如何使用 Google API 在团队云端硬盘中创建文件夹? 2022-01-01
- 覆盖 Magento 社区模块控制器的问题 2022-01-01
- 如何从数据库中获取数据以在 laravel 中查看页面? 2022-01-01
- 如何在 Symfony2 中正确使用 webSockets 2021-01-01