普通网友 2015-06-30 08:22
浏览 40
已采纳

如何从动态多维数组生成菜单[关闭]

Lets say I have the array down here. I left out a few maps and files as this should be enough to make my point. There is no max depth to the array so there could be even more.

Array
(
    [media] => Array
        (
            [documents] => Array
                (
                    [0] => add.php
                )    
            [music] => Array
                (
                    [albums] => Array
                        (
                            [0] => add.php
                        )    
        )    
    [overview] => Array
        (
            [0] => overview.php
        )
) 

What I would like to get is something like the following:

<ul>
    <li>Media
        <ul>
            <li>Documents
                <ul>
                    <li><a href="/media/documents/add.php">Add</a></li>
                </ul>
            </li>

            <li>Music
                <ul>
                    <li>Albums
                        <ul>
                            <li><a href="/media/music/albums/add.php">Add</a></li>
                        </ul>
                    </li>
                </ul>
            </li>
        </ul>
    </li>

    </li>Overview
        <ul>
            <li><a href="/overview/overview.php">Overview</a></li>
        </ul>
    </li>
</ul>

I found php create navigation menu from multidimensional array dynamically but imo the accepted answer has quite a lot garbage and the result isn't quite of what I need. If you would like to know how the array is generated please let me know.

Thanks in advance for helping me

  • 写回答

2条回答 默认 最新

  • doutonghang2761 2015-06-30 08:27
    关注

    You need to use a recursive function that loops through your array. Something like this:

    function outputMenu(array $array, $baseUrl = '/')
    {
        $html = '';
        foreach ($array as $key => $item)
        {
            if (is_array($item))
            {
                $html .= '<li>'.$key.'<ul>';
                $html .= outputMenu($item, $baseUrl.$key.'/');
                $html .= '</ul></li>';
            }
            else
            {
                $html .= '<li><a href="'.$baseUrl.$item.'">'.ucfirst(substr($item, 0, -4)).'</a></li>';
            }
        }
        return $html;
    }
    
    echo outputMenu($array);
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 (希望可以解决问题)ma和mb文件无法正常打开,打开后是空白,但是有正常内存占用,但可以在打开Maya应用程序后打开场景ma和mb格式。
  • ¥20 ML307A在使用AT命令连接EMQX平台的MQTT时被拒绝
  • ¥20 腾讯企业邮箱邮件可以恢复么
  • ¥15 有人知道怎么将自己的迁移策略布到edgecloudsim上使用吗?
  • ¥15 错误 LNK2001 无法解析的外部符号
  • ¥50 安装pyaudiokits失败
  • ¥15 计组这些题应该咋做呀
  • ¥60 更换迈创SOL6M4AE卡的时候,驱动要重新装才能使用,怎么解决?
  • ¥15 让node服务器有自动加载文件的功能
  • ¥15 jmeter脚本回放有的是对的有的是错的