我收到了这两个php警告
PHP Warning: Illegal string offset 'subpages'
和
PHP Warning: Invalid argument supplied for foreach() in
代码行是
foreach ($value ['subpages'] as $subfilename => $subpageTitle) {
这是完整的php,所以你可以看到正在发生的事情
阵列
// Menu Items
$li_1 = 'Temp Jobs';
$li_2 = 'Domestic Jobs';
$li_3 = 'HR';
$li_4 = 'Job Resume Tips';
$pages = array(
// Temp Jobs
'temp or temporary or seasonal or holiday or part-time or pt' => $li_1,
// Domestic Jobs (with submenu)
$li_2 => array('pageTitle' => $li_2, 'subpages' => array(
'Baby-Sitter or Babysitter' => 'Babysitter',
'Nanny' => 'Nanny',
'Room-Attendant' => 'Room Attendant',
'Butler or Houseman' => 'Butler',
'Chauffeur or Chauffeuse' => 'Chauffeur',
'Maid' => 'Maid',
'Housekeeper or House-Keeper' => 'Housekeeper',
'Estate-Manager' => 'Estate Manager',
'Property-Manager' => 'Property Manager',
'House-Manager' => 'House Manager',
'Tutor' => 'Tutor',
'Caregiver or Nursing-Assistant or CNA' => 'Caregiver')),
// HR
$li_3.' or Human-Resource or Human-Resources' => $li_3,
// Job Resume Tips
'job-resume-tips' => $li_4
);
foreach ($pages as $filename => $value) {
$lis = "";
$hasCurrent = false;
if (is_array ($value)) {
$href = '#menu';
$pageTitle = $value ['pageTitle'];
} elseif (str_replace("-"," ", $filename) == strtolower($value)) {
$href = $dir_structure.$filename.'/';
$pageTitle = $value;
} else {
$href = $dir_structure.'jobs/?position='.urlencode($filename);
$pageTitle = $value;
}
if ($value != '') {
foreach ($value ['subpages'] as $subfilename => $subpageTitle) {
$lis .= '
<li'.(($position == $subfilename) ? ' class="current"' : '').'><a href="'.$dir_structure.'jobs/?position='.urlencode($subfilename).'">'.$subpageTitle.'</a></li>';
if ($position == $subfilename) {
$hasCurrent = true;
}
} // foreach sub_menus
echo '
<li'.($hasCurrent || $value == $currentPage || $position == $filename ? ' class="current"' : '').'>
<a href="'.$href.'">'.$pageTitle.'</a>';
if($lis != '') {
echo '
<ul class="subMenu">';
echo $lis;
echo '
</ul>';
} // if lis
} // if sub_menus
echo '
</li>';
} // foreach pages
我已经在这里阅读了其他问题并知道我用if ($value != '') {
替换if (is_array ($value)) {
是否会消除错误,但导航菜单只会显示包含子菜单的选项卡。如何摆脱这个php警告,同时确保我的所有导航菜单标签都显示出来?无法弄清楚。
并非所有顶级导航标签都有下拉菜单。在上面的示例中,只有顶部标签Domestic Jobs
具有下拉菜单。
答案 0 :(得分:1)
在循环的第一次迭代中,您正在尝试获取字符串的子页面索引。
您还应该在循环之前执行is_array检查。所以这可行。
if isset($value['subpages']) && (is_array($value['subpages'])) {
foreach ($value ['subpages'] as $subfilename => $subpageTitle) {
答案 1 :(得分:0)
if (isset($value['subpages']) && is_array($value['subpages'])) {
foreach ($value['subpages'] as $subfilename => $subpageTitle)
}
答案 2 :(得分:0)
这似乎达到了预期的效果;
if(is_array($value)) {
foreach ($value ['subpages'] as $subfilename => $subpageTitle) {
.....
} // if lis
} // if sub_menus
else {
echo '<li class="current"><a href="'.$href.'">'.$pageTitle.'</a>';
}