php - 递归打印多维数组作为下拉菜单,而无需在 PHP 中进行硬编码循环

标签 php css loops drop-down-menu multidimensional-array

我有一个数组,其中保存了一个包含 100 多个元素的菜单,然后将其打印为 CSS 下拉菜单。有 5 个主菜单,其中有子菜单,其中一些有子菜单等等。现在我在打印它们时正在对循环进行硬编码,但我相信一定有一些聪明的方法可以做到这一点只需几行代码!这是数组的开头:

$menu = array(
    array(
        'title' => 'Travel tips',
        'url' => 'travel-tips',
        'sub' => array(
            array(
                'title' => 'Travel guide',
                'url' => 'travel-guide'),
            array(
                'title' => 'Places to visit',
                'url' => 'places-to-visit',
                'sub' => array(
                    array(
                        'title' => 'Ahu Akivi',
                        'url' => 'ahu-akivi'),
                    array(
                        'title' => 'Ahu Tongariki',
                        'url' => 'ahu-tongariki'),
                    array(
                        'title' => 'Anakena',
                        'url' => 'anakena'),
                    array(
                        'title' => 'Orongo',
                        'url' => 'orongo'),
                    array(
                        'title' => 'Rano Kau',
                        'url' => 'rano-kau'),
                    array(
                        'title' => 'Rano Raraku',
                        'url' => 'rano-raraku'),
                    array(
                        'title' => 'Vinapu',
                        'url' => 'vinapu'))),
            array(
                'title' => 'Things to do',
                'url' => 'things-to-do',
                'sub' => array(
                    array(
                        'title' => 'Beaches',
                        'url' => 'beaches'),
                    array(
                        'title' => 'Church',
                        'url' => 'church'),
                    array(
                        'title' => 'Fishing',
                        'url' => 'fishing'),

...然后它继续下去。如何在不对循环进行硬编码的情况下,仅用几行代码递归地干净利落地循环这个循环?

最佳答案

如果您不想指定循环次数,您需要一个自调用函数。只需在每个循环中添加您想要的 div/类/格式。

function echoMenu($arr){
    foreach($arr as $subArr){
        if(!empty($subArr['sub'])){
            echo "<a href='{$subArr['url']}'>{$subArr['title']}</a>";
            echo "<div class='for-sub-links'>";
            echoMenu($subArr['sub']);
            echo "</div>";
        }else{
            echo "<div><a href='{$subArr['url']}'>{$subArr['title']}</a></div>";
        }   
    }
}

关于php - 递归打印多维数组作为下拉菜单,而无需在 PHP 中进行硬编码循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18520342/

相关文章:

php - 更改 Laravel TokenGuard 存储 key

php - Json Schema - 验证无限递归结构

html - 选择元素上下拉框的大小

css - 如何将导航菜单重叠在幻灯片图像上

loops - 循环查找变量字符串 BATCH 中的每个字符

php - simplexml_load_string foreach 不显示任何内容

php - 使用 Carbon 将 utc 更改为其他时区会得到相同的结果

css - 为什么添加 CSS 渐变会禁用背景颜色样式?

javascript - 如何在 JavaScript 中迭代 Redis 排序集(ZADD/ZRANGEBYSCORE)?

python - 如何使用循环在 python 中执行 Mann-Whitney U 测试?