Я получаю эти два предупреждения 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
имеет выпадающее подменю.
Это похоже на достижение желаемого эффекта;
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>';
}
В первой итерации цикла вы пытаетесь получить индекс подстраниц строки.
Вы также должны выполнить проверку is_array перед циклом. Так что это может сработать.
if isset($value['subpages']) && (is_array($value['subpages'])) {
foreach ($value ['subpages'] as $subfilename => $subpageTitle) {
if (isset($value['subpages']) && is_array($value['subpages'])) {
foreach ($value['subpages'] as $subfilename => $subpageTitle)
}