簡體   English   中英

多維數組(2)

[英]Multidimensional Array (2)

我遇到遍歷這個數組:

print_r($ menu)給出以下信息:

[Dashboard] => Array
    (
        [uri] => dashboard
        [access_level] => Full
    )

[Web Site] => Array
    (
        [uri] => website
        [access_level] => Full
    )

[Pricing] => Array
    (
        [uri] => pricing
        [access_level] => Full
        [submenu] => Array
            (
                [Change Pricing] => Array
                    (
                        [uri] => pricing/change
                        [access_level_required] => Full
                    )

            )

    )

我正在嘗試使用foreach循環訪問每個主要區域。 那部分工作正常,但是我在訪問定價數組中的“子菜單”數組時遇到問題。

<ul>
        <?php foreach($menu as $section_name=>$section_array): ?>
            <li><?=anchor($section_array['uri'],$section_name)?>
            <?php

            if (is_array($section_array['submenu'])) echo 'its an array';

            ?></li>
        <?php endforeach; ?>
        </ul>

現在,我什至不知道$ section_array ['submenu']是否是一個數組。 我一定不能正確訪問它,但是我不確定為什么。 我收到錯誤消息:“消息:未定義索引:子菜單”

順便說一下,這是用CodeIgniter 1.7.2短標簽編寫的,但是您應該能夠了解我的foreach知識。

出現該消息是因為在您的示例中,只有一個第一級元素定義了“子菜單”鍵。 即最后一個。 對於所有其他人,該鍵丟失了。

更換

is_array($section_array['submenu']))

array_key_exists('submenu', $section_array) && is_array($section_array['submenu']))

它應該可以正常工作。

子菜單僅存在於某個部分是問題所在。它存在於Pricing數組中,而不存在於Dashboard或Web站點數組中。 一種選擇是在其周圍包裝一條語句以檢查section_name,或者可能使用函數檢查該數組名稱是否已定義。

        <ul>
        <?php foreach($menu as $section_name=>$section_array): ?>
            <li><?=anchor($section_array['uri'],$section_name)?>
            <?php
            if ($section_name == 'Pricing')
            {
              if (is_array($section_array['submenu'])) echo 'its an array';
            }
            ?></li>
        <?php endforeach; ?>
        </ul>

您會在前幾個鏈接(儀表板和網站)上看到錯誤,但是由於該子菜單存在,因此應該可以在定價上使用。 通過檢查以確保子菜單首先存在,嘗試使if語句稍微復雜一些:

if ($section_array['submenu'] && is_array($section_array['submenu'])){}

通常我不喜歡混合使用PHP和HTML,但是我認為在這種情況下,您將從遞歸函數中受益。 使用issetarray_key_exists查看密鑰是否在數組中:

function createMenuHTML($menu) {
    $html = '<ul>';
    foreach($menu as $section_name=>$section_array) {
        $html .= '<li>' . anchor($section_array['uri'],$section_name);
        if(array_key_exists('submenu', $section_array)) {
            $html .= createMenuHTML($section_array['submenu']);
        }
        $html .= '</li>';
    }
    $html .= '</ul>';
    return $html;
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM