doujiu8145 2018-10-29 22:03
浏览 13
已采纳

数组排序菜单

I have the following array to show menu's based on the order the user specified.

The array is as follows:

$menuArray = [
    'Main Street' => [
        ['/index.php', 'Home'],
        ['/city.php', $cityData[$user->city][0]],
        ['/travel.php', 'Travel'],
        ['/bank.php', 'Bank'],
        ['/inventory.php', 'Inventory'],
        ['/dailies.php', 'Dailies'],
    ],
    'Activities' => [
        (!$my->hospital) ? ['/hospital.php', 'Hospital'] : [],
        (!$my->hospital && !$my->prison) ? ['/crime.php', 'Crime'] : [],
        ['/missions.php', 'Missions'],
        ['/achievements.php', 'Achievements'],
    ],
    'Services' => [
        ['/hospital.php', 'Hospital'],
        ['/prison.php', 'Prison'],
        ['/search.php', 'Search'],
    ],
    'Account' => [
        ['/edit_account.php', 'Edit Account'],
        ['/notepad.php', 'Notepad'],
        ['/logout.php', 'Logout'],
    ]
];

I have a column menu_order stored in the database, which has a default value of 0,1,2,3,4, but this can change per user as they will be able to change their menu to their likes.

What I'd like to achieve:

0 => Main Street
1 => Activities
2 => Services
3 => Account
4 => Communication

To get the menu order, I do

$menuOrder = explode(',', $user->menu_order);

But I'm not sure how to handle the foreach for displaying the menu.

  • 写回答

2条回答 默认 最新

  • doukun1450 2018-10-29 22:26
    关注

    You could try something like this to produce the menu:

    function display_menu($menus, $m) {
        if (!isset($menus[$m])) return;
        echo "<ul>";
        foreach ($menus[$m] as $item) {
            if (!count($item)) continue;
            echo "<li><a href=\"{$item[0]}\">{$item[1]}</a>
    ";
        }
        echo "</ul>";
    }
    $menuMap = array(0 => 'Main Street',
    1 => 'Activities',
    2 => 'Services',
    3 => 'Account',
    4 => 'Communication');
    $menuOrder = explode(',', $user->menu_order);
    foreach ($menuOrder as $menuIndex) {
        $thisMenu = $menuMap[$menuIndex];
        display_menu($menuArray, $thisMenu);
    }
    

    Small demo on 3v4l.org

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 echarts动画效果失效的问题。官网下载的例子。
  • ¥60 许可证msc licensing软件报错显示已有相同版本软件,但是下一步显示无法读取日志目录。
  • ¥15 Attention is all you need 的代码运行
  • ¥15 一个服务器已经有一个系统了如果用usb再装一个系统,原来的系统会被覆盖掉吗
  • ¥15 使用esm_msa1_t12_100M_UR50S蛋白质语言模型进行零样本预测时,终端显示出了sequence handled的进度条,但是并不出结果就自动终止回到命令提示行了是怎么回事:
  • ¥15 前置放大电路与功率放大电路相连放大倍数出现问题
  • ¥30 关于<main>标签页面跳转的问题
  • ¥80 部署运行web自动化项目
  • ¥15 腾讯云如何建立同一个项目中物模型之间的联系
  • ¥30 VMware 云桌面水印如何添加