首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多维数组(2)

多维数组(2)
EN

Stack Overflow用户
提问于 2010-09-14 00:30:27
回答 4查看 255关注 0票数 1

我有一个在遍历时遇到问题的数组:

print_r($menu)提供了以下功能:

代码语言:javascript
运行
复制
[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循环访问每个主要区域。这部分运行良好,但我在访问定价数组中的“子菜单”数组时遇到了问题。

代码语言:javascript
运行
复制
<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的意思。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-09-14 00:41:32

这条消息之所以出现,是因为在您的示例中,只有一个第一级元素定义了'submenu‘键。也就是说,最后一个。对于所有其他人来说,这个键都丢失了。

替换

代码语言:javascript
运行
复制
is_array($section_array['submenu']))

使用

代码语言:javascript
运行
复制
array_key_exists('submenu', $section_array) && is_array($section_array['submenu']))

它应该工作得很好。

票数 3
EN

Stack Overflow用户

发布于 2010-09-14 00:36:28

子菜单只存在于某个部分才是问题所在。它存在于定价数组中,而不是仪表板或网站数组中。一种选择是在它周围包装一条语句来检查section_name,或者可能使用一个函数来检查是否定义了该数组名称。

代码语言:javascript
运行
复制
        <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>
票数 1
EN

Stack Overflow用户

发布于 2010-09-14 00:38:54

你会在前几个链接(仪表板和网站)上看到一个错误,但随后它应该会在定价上起作用,因为子菜单存在。试着让if语句变得更复杂一些,方法是先检查一下是否存在子菜单:

代码语言:javascript
运行
复制
if ($section_array['submenu'] && is_array($section_array['submenu'])){}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3702405

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档