【问题标题】:PHP: Echo menu from three dimensional array using foreach?PHP:使用foreach从三维数组中回显菜单?
【发布时间】:2015-07-05 00:26:54
【问题描述】:

我有这个多维数组来显示我的网站在某些 PHP 代码中使用的菜单。我一直在做一些实验和阅读,我想让它与多维数组一起工作,以便我可以动态显示相应的菜单。

我有 3 个不同的菜单可以显示,“一”、“二”和“三”。

$pages = array(
        'one' => array(
            'about 1' => array('services 1', 'partners 1'), 
            'events 1', 
            'contact 1'
        ), 
        'two' => array(
            'about 2' => array('services 2', 'partners 2'), 
            'events 2', 
            'contact 2'
        ), 
        'three' => array(
            'about 3' => array('services 3', 'partners 3'), 
            'events 3', 
            'contact 3'
        )
    );

到目前为止,我已经尝试了一些东西,但我无法弄清楚 - 我认为我的多维数组需要更改?

基本上如果$current_page == 'one' 那么我想为'one' 回显相应的数组。

应该是这样的:

<?php
    echo '<ul class="menu">';
    if ($current_page == 'one'){
        foreach($pages['one'] as $page => $dropdown){
            if (array has third dimension){ // pseudo code if pages have third dimension
                echo '<li class="has-dropdown">' $page '</li>\n';
                echo '<ul class="dropdown">';
                foreach($pages['one'] as $page => $dropdown){
                    echo '<li>' . $dropdown . '</li>\n';
                }
                echo '</ul>';
            } else { // no third dimension
                foreach($pages['one'] as $page){
                    echo '<li>' $page '</li>\n';
                }
            }
        }
    }
    elseif ($current_page == 'two'){
        foreach($pages['two'] as $page){
            if (array has third dimension){ // pseudo code if pages have third dimension
                echo '<li class="has-dropdown">' $page '</li>\n';
                echo '<ul class="dropdown">';
                foreach($pages['one'] as $page => $dropdown){
                    echo '<li>' . $dropdown . '</li>\n';
                }
                echo '</ul>';
            } else { // no third dimension
                foreach($pages['one'] as $page){
                    echo '<li>' $page '</li>\n';
                }
            }
        }
    }
    elseif ($current_page == 'three'){
        foreach($pages['three'] as $page){
            if (array has third dimension){ // pseudo code if pages have third dimension
                echo '<li class="has-dropdown">' $page '</li>\n';
                echo '<ul class="dropdown">';
                foreach($pages['one'] as $page => $dropdown){
                    echo '<li>' . $dropdown . '</li>\n';
                }
                echo '</ul>';
            } else { // no third dimension
                foreach($pages['one'] as $page){
                    echo '<li>' $page '</li>\n';
                }
            }
        }
    }
    echo '</ul>';
?>

以上方法不起作用,这只是我一直在尝试的粗略描述。问题是:如何使用 foreach 循环来显示我的菜单?任何帮助表示赞赏!

【问题讨论】:

    标签: php arrays multidimensional-array foreach


    【解决方案1】:

    我真的不知道该说什么,这只是代码。研究一下,如果您有任何问题,我会很乐意提供帮助!

    请注意,此代码将仅处理 3 维数组,如果您需要添加更多子级别,最好研究递归,但它可能是一个更复杂的主题。

    $pages = array(
        'one' => array(
            'about 1' => array('services 1', 'partners 1'),
            'events 1',
            'contact 1'
        ),
        'two' => array(
            'about 2' => array('services 2', 'partners 2'),
            'events 2',
            'contact 2'
        ),
        'three' => array(
            'about 3' => array('services 3', 'partners 3'),
            'events 3',
            'contact 3'
        )
    );
    
    $current_page = 'one';
    
    echo '<ul class="menu">';
    if (array_key_exists($current_page, $pages)) {
        foreach($pages[$current_page] as $item => $items) {
            echo '<li class="has-dropdown">';
    
    
            if (is_array($items)) {
                echo $item . '<ul class="dropdown">';
                foreach($items as $page => $dropdown) {
                    echo '<li>'.$dropdown.
                    '</li>\n';
                }
                echo '</ul>';
            }else{
                echo $items;
            }
    
            echo '</li>';
        }
    }
    
    echo '</ul>';
    

    【讨论】:

    • 非常感谢!我已经在这里测试了sandbox.onlinephpfunctions.com/code/… 并玩了一下,你太棒了!虽然我没有任何问题,但我肯定会研究递归
    • 我现在有一个问题要问你!是否可以将其放入一个函数中,然后像这样调用该函数...$navigation = myMenuFunction(); echo $navigation;
    • @Matthew 当然很好。您需要考虑函数的范围。将 html 存储在变量中而不是 echo 中,然后从函数中返回该变量。
    猜你喜欢
    • 2013-01-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-12-27
    • 2017-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多