【问题标题】:how do I view recursive menu items from Array of Array data in PHP如何从 PHP 中的数组数据数组中查看递归菜单项
【发布时间】:2016-07-01 19:29:44
【问题描述】:

我正在尝试在我的应用程序中查看动态菜单。我制定了我将有一张桌子的政策,我将自己将菜单项添加到桌子上。我有一张这样的表Menu_Panel

id   menu_name    parent_menu_id
1    root         0
4    user         1
5    sales        1
6    user-list    2

对于嵌套项目,我进行了查询,然后我执行了查询,输出如下:

Array
(
[1] => Array
    (
        [id] => 1
        [menu_name] => root
        [parent_menu_id] => 0
        [sub-menu] => Array
            (
                [4] => Array
                    (
                        [id] => 4
                        [menu_name] => user
                        [parent_menu_id] => 1
                        [sub-menu] => Array
                            (
                                [6] => Array
                                    (
                                        [id] => 6
                                        [menu_name] => user-list
                                        [parent_menu_id] => 2
                                    )


                            )

                    )

                [5] => Array
                    (
                        [id] => 5
                        [menu_name] => Sales
                        [parent_menu_id] => 1
                    )

            )

    )

)

现在我想,我得到了我想要的结果,因为它看起来像嵌套的。现在我想在我的视图页面中显示 ul->li 中的这个递归菜单项。这是我的代码:我将结果保存到$side_bar_menu::

@foreach($side_bar_menu as $module)
            <li class="mm-dropdown">

                <a href="#"><i class="menu-icon fa fa-columns"></i><span class="mm-text">User </span></a>
                <ul>
                @foreach($module['sub-menu'] as $sub_module)
                    <li>
                        <a tabindex="-1" href="{{route('menu-panel')}}"><span class="mm-text">Menu Panel</span></a>
                    </li>
                @endforeach
                </ul>
            </li>
            @endforeach

我想我错过了 foreach 中的一些东西。在这种情况下,$module['sub-menu'] 不起作用。正如我注意到的那样,数组索引号不是连续的。

我的问题是如何在 php 中查看我的视图文件中的项目列表?

【问题讨论】:

  • 等一下你真正想要达到什么目标?
  • @TimOgilvy :: 我在下面得到了答案。我想用 li -> ul -> li 查看嵌套菜单项

标签: php mysql arrays laravel cakephp


【解决方案1】:

我认为您可以从根级别使用foreach。这是您可以尝试的视图代码:

@if($side_bar_menu)
    <?php //print_r($side_bar_menu); exit(); ?>
    @foreach($side_bar_menu as $module)
            @foreach($module['sub-menu'] as $sub_module)
            <?php // print_r($sub_module['menu_name']);  ?>
                <li class="mm-dropdown">
                    <a tabindex="-1" href="{{route('menu-panel')}}"><span class="mm-text">{{$sub_module['menu_name']}}</span></a>
                    <ul>
                        @foreach($sub_module['sub-menu'] as $sub_sub_module)
                        <?php // print_r($sub_sub_module['menu_name']);  ?>
                            <li>
                                <a tabindex="-1" href="{{route('menu-panel')}}"><span class="mm-text">{{$sub_sub_module['menu_name']}}</span></a>
                            </li>
                        @endforeach
                    </ul>
                </li>
            @endforeach
    @endforeach

我希望这会奏效。如果您有任何问题,请告诉我。

【讨论】:

    【解决方案2】:

    乍一看,您似乎在尝试将顺序数组视为关联数组。但是,我不熟悉您使用的 cake/laravel 标记。在原版 PHP 中,你会这样对待它:

    foreach ($module as $moduleIndex => $menuModule) {
    
        // Do top level stuff here using $menuModule
        $subMenu = $menuModule['sub-menu'];
    
        foreach ($subMenu as $smIndex => $subItem) {
    
            // Do submenu stuff here using $subItem
    
           renderSubmenuItems($subItem);
    
        }
    }
    

    不确定这是否会有所帮助,但请查看处理关联数组与顺序数组。希望你能找到你的问题。

    【讨论】:

    • :: 这也是一个很好的解决方案。我们可以通过我们的方法而不是查看页面来制作项目。我真的很喜欢这个。
    • @SelimReza 我不得不承认我不喜欢模板引擎,因为它们诱使我放弃使用 OOP 解决问题。但我也表现出我对 Cake 和 Laravel 的无知
    • :: 确实。请您详细说明一下,以便我获得一些知识。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 2019-07-12
    • 2010-10-06
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多