我有一个在遍历时遇到问题的数组:
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的意思。
发布于 2010-09-14 00:41:32
这条消息之所以出现,是因为在您的示例中,只有一个第一级元素定义了'submenu‘键。也就是说,最后一个。对于所有其他人来说,这个键都丢失了。
替换
is_array($section_array['submenu']))
使用
array_key_exists('submenu', $section_array) && is_array($section_array['submenu']))
它应该工作得很好。
发布于 2010-09-14 00:36:28
子菜单只存在于某个部分才是问题所在。它存在于定价数组中,而不是仪表板或网站数组中。一种选择是在它周围包装一条语句来检查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>
发布于 2010-09-14 00:38:54
你会在前几个链接(仪表板和网站)上看到一个错误,但随后它应该会在定价上起作用,因为子菜单存在。试着让if语句变得更复杂一些,方法是先检查一下是否存在子菜单:
if ($section_array['submenu'] && is_array($section_array['submenu'])){}
https://stackoverflow.com/questions/3702405
复制相似问题