【问题标题】:How to display values from an array which is both indexed and multidimensional?如何显示索引和多维数组中的值?
【发布时间】:2019-01-31 15:08:06
【问题描述】:

我知道如何分别显示索引数组和多维数组中的值(使用 foreach),但是当它是两者的组合时,我无法使其工作。

我正在使用如下结构的数组创建一个两级导航菜单:

$pages = array(
    'home',
    'about' => array(
        'label' => 'Who We Are',
        'children' => array(
            'company',
            'team'
        ),
    ),
);

当我使用带有键值对的 foreach 时

foreach ($pages as $page => $value){
    echo $page; // output:    0  about
    echo $value; // output:    home  array
}

并且没有键值对:

foreach ($pages as $page){
    echo $page; // output:    home  array  array
}

我只是希望输出是

Home    Who We Are

有人能指出正确的方向吗?

提前致谢!

【问题讨论】:

  • 您能否添加您正在使用的实际代码,而不是说 当我使用带有键值对的 foreach 时,我明白了,它会让您更清楚您的问题出在哪里。
  • 你制作了不规则的结构。可能会更合适$pages = [ 'home' => [ 'label' => 'Home',], 'about' => [ 'label' => 'Who We Are', 'children' => [... ], ],
  • @NigelRen 刚刚添加了 foreach 部分。
  • @splash58 如果可能的话,我希望只使用“home”而不是创建标签“Home”,因为我可以通过 css 将其大写或使用 ucwords()。

标签: php arrays multidimensional-array


【解决方案1】:

使用 is_array 函数是一个技巧。你这样编码

$pages = array(
    'home',
    'about' => array(
        'label' => 'Who We Are',
        'children' => array(
            'company',
            'team'
        ),
    ),
);
foreach($pages as $key=>$value){
    if(is_array($value)){
        echo $value["label"];
    }else{
        echo $value;
    }
}

【讨论】:

  • 对了!检查它是否是一个数组。非常感谢!
【解决方案2】:
<?php
$pages = array(
'home',
'about' => array(
    'label' => 'Who We Are',
    'children' => array(
        'company',
        'team'
    ),
),

);

foreach($pages as $key =>$page){
if(!is_array($page)){
    echo $page;
}
}
if(is_array($pages['about'])){
foreach($pages['about'] as $about){
    if(!is_array($about)){
        echo " ".$about;
    }
}
}

if(is_array($pages['about']['children'])){
foreach ($pages['about']['children'] as $child){
    if(!is_array($child)){
        echo " ".$child;
    }
}
}

?>

【讨论】:

    【解决方案3】:

    您可以使用递归函数来循环遍历该数组,使用此代码。

    function loop($arr){
    
      foreach($arr as $val){
          if (is_array($val)) {
             loop($val);  
          }
          else {
           echo $val . '<br>';      
          }
    
      }
    
    }
    
    $pages = array(
        'home',
        'about' => array(
            'label' => 'Who We Are',
            'children' => array(
                'company',
                'team'
            ),
        ),
    );
    
    loop($pages);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多