【问题标题】:How to use two arrays to create one string in PHPPHP中如何使用两个数组创建一个字符串
【发布时间】:2014-02-23 05:22:19
【问题描述】:

我这里有这段代码:

<ul>
<li<?php if ($page == 'home') echo ' class="active' ?>><a href="index.php">Home</a></li>
<li<?php if ($page == 'contact') echo ' class="active' ?>><a href="pages/contact.php">Contact Us</a></li>
<li<?php if ($page == 'services') echo ' class="active' ?>><a href="pages/services.php">Services</a></li>
<li<?php if ($page == 'employees') echo ' class="active' ?>><a href="pages/employees.php">Employees</a></li>
<li<?php if ($page == 'dashboard') echo ' class="active' ?>><a href="pages/dashboard.php">Dashboard</a></li>
</ul>

但我想重构它以消除一些重复。我正在使用数组,并把它放在这样的地方:

$pages = array(
    "index.php" => "Home", 
    "contact.php" => "Contact Us", 
    "services.php" => "services", 
    "employees.php" => "Employees", 
    "dashboard.php" => "Dashboard");



foreach ($pages as $item) {
    if (isset($_GET['page']) && $_GET['page'] == $item) {
        echo 'class="active" ?><a href="' . array_keys($item) . '"> ' . array_values($item) . '</a></li>';
    } else {
        echo '<a href="' . array_keys($item) . '"> " . ' . array_values($item) . '</a></li>';}

我似乎无法让它工作。我希望它将最后一行放在一起,以便我在该页面上而不是其他情况下向我的导航栏标签添加一个活动类。有没有合理的方法可以做到这一点,这是一种好的做法吗?

【问题讨论】:

  • 使用&lt;?php foreach (...):?&gt;&lt;?php endforeach; ?&gt;怎么样?

标签: php arrays web iteration navbar


【解决方案1】:

有些地方不太对劲:

  • foreach 不是这样工作的,$item 只是值。它没有设置为可以使用array_keysarray_values 的数组。你需要foreach ($pages as $url =&gt; $label

  • 您缺少每行的 &lt;li 部分。

  • 您的第一个echo 中有一个额外的?&gt;,它应该是&gt;

  • 您正在复制一个 很多。唯一需要有条件输出的是 `class="active"' 部分

foreach ($pages as $url => $label) {
  echo '<li ';

  if (isset($_GET['page']) && $_GET['page'] == $url) {
    echo 'class="active"';
  }
  echo '><a href="' . $url . '"> " . ' . $label. '</a></li>';
}

【讨论】:

    【解决方案2】:

    试试:

    foreach ($pages as $item=>$val) {
        echo '<li';
        if (isset($_GET['page']) && $_GET['page'] == $item) {
            echo ' class="active" ><a href="' . $item . '"> ' . $val . '</a></li>';
        } else {
            echo '><a href="' . $item . '"> ' . $val . '</a></li>';}
    }
    

    你有很多不需要的."。删除了这些,如果您使用的是foreach,则不需要使用array_keysarray_values

    【讨论】:

      【解决方案3】:
      <ul>
      <?php foreach ($pages as $key => $value): ?>
      <?php 
      $class = isset($_GET['page']) && $_GET['page'] === $key ? ' class="active"' : '';
      ?>
      <li<?=$class?>><a href="<?=$key?>"><?=$value?></a></li>
      <?php endforeach; ?>
      </ul>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-12
        • 1970-01-01
        相关资源
        最近更新 更多