【问题标题】:How to nest data in PHP array and access it with foreach()?如何在 PHP 数组中嵌套数据并使用 foreach() 访问它?
【发布时间】:2013-06-11 09:53:30
【问题描述】:
foreach ($nav_items as $nav_href=>$nav_title=>$nav_class) {
    if ($pageHref == $nav_href) {
        echo '<li class="' . $nav_class .  'active">' . $nav_title . '</li>';
    } else {
        echo '<li class="' . $nav_class . '">' . $nav_title . '</li>';
    }
}

上面这段代码有什么问题?这对应于下面的数组。

$pageLoc = 'where';
$nav_items = array(
    'index'=>'Home'==>'', 
    'where'=>'Where?'==>'dropdown'==>'', 
    'appeals'=>'Current Appeals'==>'', 
    'news'=>'Latest News'==>'', 
    'events'=>'Events'==>'', 
    'dontate'=>'Dontate'==>'', 
);

我基本上是想在列表项与 $pageLoc 匹配时将一个活动类放在列表项的前面,而当它不仅仅是一个简单的 &lt;li class=""&gt; 但下拉菜单项:'where?' 需要一个 &lt;li class="dropdown"&gt;总是!当它处于活动状态时,它将是&lt;li class="dropdown active"&gt;

【问题讨论】:

  • 您需要为此使用嵌套数组
  • 所有你需要做的就是找出这不起作用是......运行代码。你会得到一个错误,告诉你到底出了什么问题(在这种情况下是你的语法)。

标签: php arrays foreach navbar


【解决方案1】:

没有这样的语法让它变得如此简单。 但这里可能是你想要的:

这就是你如何创建一个适合你需要的嵌套数组

$nav_items = array(
    array('href' => 'index',   'title' => 'Home',            'class' => ''), 
    array('href' => 'where',   'title' => 'Where?',          'class' => 'dropdown'), 
    array('href' => 'appeals', 'title' => 'Current Appeals', 'class' => ''), 
    array('href' => 'news',    'title' => 'Latest News',     'class' => ''), 
    array('href' => 'events',  'title' => 'Events',          'class' => ''), 
    array('href' => 'dontate', 'title' => 'Dontate',         'class' => ''),                
);

根据上面的数组结构,这将是您使用的foreach

foreach ($nav_items as $item) {
    if ($pageHref == $item['href']) {
        echo '<li class="' . $item['class'] .  ' active">' . $item['title'] . '</li>';
    } else {
        echo '<li class="' . $item['class'] . '">' . $item['title'] . '</li>';
    }
}

DEMO FIDDLE

这里还有 2 个注释:

注意1: 中,您可以使用对象并创建一个导航项类,其中包含仅在简单array('href' =&gt; 'dontate', 'title' =&gt; 'Dontate', 'class' =&gt; '') 之上的信息。

注2: 你的线路

echo '<li class="' . $nav_class .  'active">' . $nav_title . '</li>';

将两个类连接为一个。所以这段代码会给你dropdownactive作为类。您需要在活动之前插入一个空格,否则 CSS 将无法识别这两个类。

【讨论】:

    【解决方案2】:

    您的 $nav_items 非常混乱,不是正确的数组。

    $pageLoc = 'where';
    $nav_items = array('index'=>'Home==>', 'where'=>'Where?==>', 'appeals'=>'Current Appeals==>', 'news'=>'Latest News==>', 'events'=>'Events==>', 'dontate'=>'Dontate==>');
    
    
    foreach ($nav_items as $nav_class=>$nav_title) {
       if ($pageLoc == $nav_href) {
             echo '<li class="' . $nav_class .  'active">' . $nav_title . '</li>';
       } 
       else {
           echo '<li class="' . $nav_class . '">' . $nav_title . '</li>';
       }
    }
    

    【讨论】:

      【解决方案3】:

      你可以这样写:

      foreach ($nav_items as $nav_title=>$nav_class) {

        ....  
      

      }

      你想用 $nav_href 检查什么?

      【讨论】:

      • 用于导航栏菜单。所以他们都有正常的
      • 。在该页面上时,例如当 $nav_href='current-page' 时,该菜单项的 li 类将是“活动的”,而其他的则保留在
      • 。我的问题是,我有一个菜单项总是需要一个下拉类。
    • 你为什么不这样检查? if($pageLoc == $nav_class) 因为您的 $nav_class 是键值对中的键,从您的数组中可以看出,“where”似乎是键。
    • 【解决方案4】:

      你有一个明确的语法错误:

      foreach ($nav_items as $nav_href=>$nav_title=>$nav_class) {
                                                  ^^^^^^^^^^^^
      

      语法是

      foreach($array as $key => $value)
      

      你不能拥有=&gt; $value1 =&gt; $value2 etc...

      【讨论】:

      • 关于如何解决我的问题的任何想法?我有一个包含活动课程的菜单。但是对于一个菜单项,我需要一个下拉类总是在那里主持。
      • $nav_href=&gt;$nav_title 在你的 foreach 中,然后从 foreach 循环中获取它们
      猜你喜欢
      相关资源
      最近更新 更多
      热门标签