【问题标题】:Changing single item in foreach loop更改 foreach 循环中的单个项目
【发布时间】:2017-11-04 19:37:55
【问题描述】:

我想使用PHP 及其foreach 循环生成导航菜单。所以既然“家”这个项目和其他的有点不同,我想给他打电话,在一定的条件下改变它的风格。下面的代码适用于除主页之外的所有其他菜单项,因为它出于某种原因将array 添加到<li> 标记。你能指出我在这里犯的错误吗?

<?php
  $menu = array("Home" => "http://mywebsite.com", "Projects" => "/projects/", "About" => "/about/", "Contact" => "/contact/");
  foreach ($menu as $opis => $link)
  {
    if (strtolower($opis) == $_GET['go'])
    {
      $style = "class=\"active\"";
    }
    else
    {
      if (!$_GET['go'] || $_GET['go'] == "home")
      {
        $style[0] = "class=\"active\"";
        echo $style[0] . " ";
      }      
    }
    echo "<li ".$style."><a href=".$link.">".$opis."</a></li>";
  }
?>

【问题讨论】:

    标签: php list foreach navigation


    【解决方案1】:

    您需要将$style 设置为''。如果不这样做,一旦设置,您将在下一次迭代中保留class="active"

    $menu = array("Home" => "http://mywebsite.com", "Projects" => "/projects/", 
    "About" => "/about/", "Contact" => "/contact/");
    if(empty($_GET['go'])) $_GET['go'] = 'home';
    foreach ($menu as $opis => $link)
    {
        $style = (strtolower($opis) == $_GET['go']) ? "class=\"active\"" : '';
        echo "<li $style><a href='$link'>$opis</a></li>\n";
    }
    

    【讨论】:

    • 再次,这会为所有项目添加活动类
    • 不,每次迭代都会重置。
    • 我已经检查过了,它完成了我上面写的操作
    • 仅当 $_GET['go'] 为空时。我已经优化过了。
    【解决方案2】:

    这是因为当$GET['go']home 时,您已向变量$style 添加了一个键-

    $style[0] = "class=\"active\"";
    

    将此更改为$style = "class=\"active\"";

    【讨论】:

    • 不,这将为所有项目添加额外的样式,我想一次只设置一个样式。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 2016-02-07
    • 1970-01-01
    • 2012-01-03
    相关资源
    最近更新 更多