【问题标题】:dynamically create PHP navigation menu from multidimensional array从多维数组动态创建 PHP 导航菜单
【发布时间】:2017-05-15 10:14:07
【问题描述】:

我看过很多例子,但无法找到确切的答案。回答的大多数问题要么有错误,要么没有正确回答。如果有人知道类似于我的问题的最终解决方案,请指出我的方向!

   $menu = Array
(
    [dashboard] => Array
        (
            [main] => /phone/summary
            [main_selected] => 1
            [child_selected] => 
            [children] => Array
                (
                    [phones] => /phones
                    [tablets] => /tablets
                )

        )

    [mobile templates] => Array
        (
            [main] => /phone/templates
            [main_selected] => 
        )

    [phone size] => Array
        (
            [main] => link_3
            [main_selected] => 
            [child_selected] => 
            [children] => Array
                (
                    [iphone] => /phone/iphone_size
                    [samsung] => /phone/samsung_size
                    [android] => /phone/android_size
                    [blackberry] => /phone/blackberry_size
                    [google_pixels] => /phone/google_phone_size
                )

        )

    [phone chart] => Array
        (
            [main] => /phone/charts/
            [main_selected] => 
        )


)

我想把它变成这样:

    <ul>
    <li><a href="">Dashboard<a/>
        <ul>
            <li><a href="/phones">Iphone</a></li>
            <li><a href="/tablets">Tablets</a></li>
        </ul>
    </li>
    <li><a href="/phone/templates">mobile templates<a/>
    </li>
    <li><a href="link_3">phone size<a/>
        <ul>
            <li><a href="/phone/iphone_size">Iphone</a></li>
            <li><a href="/phone/samsung_size">Samsung</a></li>
            <li><a href="/phone/android_size">Android</a></li>
            <li><a href="/phone/blackberry_size">Blackberry</a></li>
            <li><a href="/phone/google_phone_size">Google_pixels</a></li>
        </ul>
    </li>
    <li><a href="/phone/charts/">phone chart<a/></li>
</ul>

希望有人了解显示的内容。 这是我尝试过的。当然不是很好。

public function sideMenu($actions, $level = 0)
    {
        $xhtml = '';
        $main_menu = null;
        $ret = "";
        $test = "";

        foreach ($actions as $key => $value) 
        {    
            if(isset($value['children']))
            {
                $main_menu .= "<li>".$key."<li>";
                //print_r($main_menu);

                if (is_array($value["children"])) 
                {
                    $ret .= "<ul>";
                    $test = $value["children"];
                    foreach ($test as $k1 => $v1) 
                    {

                        $ret .= "<li> ".$k1." </li>";


                    }
                    $ret .= "</ul>";
                    print_r($ret);
                }


            }
            else
            {
                $main_menu .= "<li>".$key."</li>";
            }   

        }


        return $xhtml;
    }

【问题讨论】:

  • 分享你迄今为止的尝试?
  • 解析数组并生成 HTML 需要大量代码。您可以尝试编写代码。
  • 这是一项繁重的工作。您需要尝试一下,然后我们可以提供帮助
  • 作为 PHP 新手,实际上不知道从哪里开始
  • 你可以从一个有效的数组开始。然后你正在创建 $main_menu 但似乎没有显示它。

标签: php arrays multidimensional-array foreach navigation


【解决方案1】:
public function sideMenu($actions){
    $main_menu = "<ul>";
    foreach ($actions as $key => $value) 
    {    
        $main_menu .= "<li><a href='".$value['main']."'>".$key."</a>";
        if(isset($value['children']) && is_array($value['children'])){
            $main_menu .= "<ul>";
            foreach($value['children'] as $k => $v){
                $main_menu .= "<li><a href='".$v."'>".$k."</a></li>";
            }
            $main_menu .= "</ul>";
        }
        $main_menu .= "</li>";
    }

    $main_menu .= "</ul>";
    return $main_menu;
}

我已经更新了你的 sideMenu 函数,你可以通过 echo $obj-&gt;sideMenu($menu); 其中$obj 是定义此函数的类对象。

Live Demo

【讨论】:

  • 只是想。是否有不同的方法来构建代码以带来相同的结果。
  • 为您的阵列的两级菜单定制和优化的解决方案是可以理解的。如果父菜单项和子菜单项的结构相同,我们可以为 n 级递归调用相同的函数。
  • 如果您正在处理三级菜单,您是否只需添加一个额外的 foreach
  • 如果数组结构和父数组一样,我们不需要额外的foreach。如果数组结构和当前数组一样,我们必须添加额外的foreach。
  • 因为,当前数组包含 'Menu Value'=>array('main' => URL);并且 childern 包含“菜单值”=>URL;
猜你喜欢
  • 2012-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-10
  • 2021-09-16
  • 2012-01-13
  • 1970-01-01
相关资源
最近更新 更多