[英]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,但是我認為在這種情況下,您將從遞歸函數中受益。 使用isset
或array_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.