массивы — PHP Предупреждение: недопустимое смещение строки и неверный аргумент для foreach ()

Я получаю эти два предупреждения 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

Решение

Это похоже на достижение желаемого эффекта;

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>';
}
0

Другие решения

В первой итерации цикла вы пытаетесь получить индекс подстраниц строки.

Вы также должны выполнить проверку is_array перед циклом. Так что это может сработать.

if isset($value['subpages']) && (is_array($value['subpages'])) {
foreach ($value ['subpages'] as $subfilename => $subpageTitle) {
1

if (isset($value['subpages']) && is_array($value['subpages'])) {
foreach ($value['subpages'] as $subfilename => $subpageTitle)
}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector