Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP警告:为foreach()提供的字符串偏移量非法且参数无效_Php_Arrays_Multidimensional Array - Fatal编程技术网

PHP警告:为foreach()提供的字符串偏移量非法且参数无效

PHP警告:为foreach()提供的字符串偏移量非法且参数无效,php,arrays,multidimensional-array,Php,Arrays,Multidimensional Array,我得到这两个php警告 PHP Warning: Illegal string offset 'subpages' 及 代码行是 foreach ($value ['subpages'] as $subfilename => $subpageTitle) { 这是完整的php,您可以看到发生了什么 阵列 // Menu Items $li_1 = 'Temp Jobs'; $li_2 = 'Domestic Jobs'; $li_3 = 'HR'; $li_4 = 'Job Resu

我得到这两个php警告

PHP Warning:  Illegal string offset 'subpages'

代码行是

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
//菜单项
$li_1=‘临时工’;
$li_2=‘国内工作’;
$li_3=‘HR’;
$LIU 4=‘求职简历提示’;
$pages=数组(
//临时工
“临时工、临时工、季节性工、假日工、兼职工或兼职工”=>1美元,
//国内工作(带子菜单)
$li_2=>array('pageTitle'=>$li_2,'subpages'=>array(
“保姆”或“保姆”=>“保姆”,
“保姆”=>“保姆”,
“客房服务员”=>“客房服务员”,
“管家或管家”=>“管家”,
“司机或司机”=>“司机”,
“女佣”=>“女佣”,
“管家或管家”=>“管家”,
“地产经理”=>“地产经理”,
“属性管理器”=>“属性管理器”,
“房屋经理”=>“房屋经理”,
“导师”=>“导师”,
“护理者或护理助理或CNA”=>“护理者”),
//人力资源
$li_3.'或人力资源或人力资源'=>$li_3,
//求职简历小贴士
“求职简历提示”=>4美元
);
foreach($filename=>$value的页面){
$lis=”“;
$hasCurrent=false;
if(是_数组($value)){
$href=“#菜单”;
$pageTitle=$value['pageTitle'];
}elseif(str_replace(“-”,“,$filename)=strtolower($value)){
$href=$dir_结构。$filename.'/';
$pageTitle=$value;
}否则{
$href=$dir_结构。'jobs/?position='.urlencode($filename);
$pageTitle=$value;
}
如果($value!=''){
foreach($value['subpages']为$subfilename=>$subpageTitle){
$lis.='
';
如果($position==$subfilename){
$hasCurrent=true;
}
}//foreach子菜单
回声'
';
如果($lis!=''){
回声'
    ; echo$lis; 回声'
'; }//如果是lis }//如果子菜单 回声' '; }//每页
我已经阅读了这里的其他问题,知道我是否将
if($value!=''){
替换为
if(is_数组($value)){
将消除错误,但导航菜单仅显示具有子菜单的选项卡。如何消除此php警告,同时确保所有导航菜单选项卡都显示?无法理解


并非所有顶部导航选项卡都有下拉菜单。在上面的示例中,只有顶部选项卡
国内工作
有下拉菜单子菜单。

在循环的第一次迭代中,您尝试获取字符串的子页面索引

你还应该在循环之前做一个is_数组检查,这样就可以了

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

这似乎达到了预期的效果

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>';
}
if(是数组($value)){
foreach($value['subpages']为$subfilename=>$subpageTitle){
.....
}//如果是lis
}//如果子菜单
否则{
echo'
  • ; }
  • 您是否检查了
    $value
    中的内容?问题是
    $pages
    不是纯2D数组,它的许多子元素都是字符串。您的条件检查值是否为空字符串。您应该检查
    是否存在数组($value)和数组键($value['subpages'))
    HarryFink我收到此错误
    PHP警告:array\u key\u exists()需要2个参数,1个参数在
    @HarryFink中给定,您需要将数组和键作为字符串so-array\u key\u exists('subpage',$value)传递已经在我上面的问题中说过了。它在代码下面。无论如何,如果我使用你的建议,我仍然会收到这个错误
    PHP警告:非法字符串偏移量“子页面”
    很抱歉错过了isset,我已经更新了我的答案太好了!没有警告,但仍然只有1个菜单选项卡显示。如果不确定你的代码看起来是否应该工作,请尝试var_dumpi找出循环中的$lis,看看发生了什么。我犯了一个愚蠢的错误。我没有在foreach下面放一个else语句来呼应其他没有下拉列表的选项卡。我明白了,所以接受了他的答案。不要出错,但只显示了一个菜单选项卡。它是一个有下拉列表的选项卡。其他3个缺少。y你抓到了和我一样的编辑。我把它放在if子菜单下面,然后看到了你的编辑。警告消失了,现在所有菜单项显示正常。
    if (isset($value['subpages']) && is_array($value['subpages'])) {
      foreach ($value['subpages'] as $subfilename => $subpageTitle) 
    }
    
    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>';
    }