查看数组中的一个项是否为真

时间:2014-01-13 22:55:30

标签: php css arrays if-statement drop-down-menu

我正在尝试将菜单放在一起,以便感知哪个页面已加载。此站点不是在CMS中完成的,而是直接的PHP / HTML代码。

我目前的导航工作主要链接。有一个下拉,我遇到了问题。我需要能够查看父项或任何下拉列表中的子项是否处于活动状态。如果其中一个孩子活跃。在下面的例子中,这是“FAQ”,孩子们是“FAQ1”,“FAQ2”和“FAQ3”。

对于这个例子,我正在使用一个名为“active。”的CSS状态。

<style>
a{color:red;}
.active{color:blue;}
</style>

以下是用于菜单的脚本。家庭,产品和联系人的链接正在按预期工作。

<ul>
<li><a href="index.php" id="homenav" <?php if (strpos($_SERVER['PHP_SELF'], 'index.php')) echo 'class="active"';?>>Home</a></li>
<li><a href="products.php" id ="prodnav" <?php if (strpos($_SERVER['PHP_SELF'], 'products.php')) echo 'class="active"';?>>Products</a></li>
<li><a href="faq.php" id ="faqnav" <?php if (strpos($_SERVER['PHP_SELF'], 'faq.php, faq1.php, faq2.php, faq3.php')) echo 'class="active"';?>>FAQ</a>
    <ul>
        <li><a href="faq1.php">FAQ1</a></li>
        <li><a href="faq2.php">FAQ2</a></li>
        <li><a href="faq3.php">FAQ3</a></li>
    </ul>
</li>
<li><a href="contact.php" id ="connav" <?php if (strpos($_SERVER['PHP_SELF'], 'contact.php')) echo 'class="active"';?>>contact us</a></li>
</ul>

我可以请一些关于我应该如何编写这一行的帮助,让它以其他人的方式工作吗?

<li>
    <a href="faq.php" id ="faqnav" 
    <?php 
    if (strpos($_SERVER['PHP_SELF'], 'faq.php, faq1.php, faq2.php, faq3.php')) 
    echo 'class="active"'; 
    ?>
    >FAQ</a>
</li>

3 个答案:

答案 0 :(得分:2)

strpos()每个参数只接受一个字符串,你不能给它一个列表。 试试这个:

<?php if (in_array(basename($_SERVER['PHP_SELF']), array('faq.php', 'faq1.php', 'faq2.php', 'faq3.php'))) echo 'class="active"';?>

  • basename()从文件名中删除路径,因此您只有纯文件名
  • in_array()然后检查此路径是否在数组中
  • array()生成要移交给in_array()的字符串数组。请注意,您的代码中有4个单独的字符串,而不是一个长字符串。

答案 1 :(得分:0)

为此目的使用in_array

if (in_array($_SERVER['PHP_SELF'], array('faq.php', 'faq1.php', 'faq2.php', 'faq3.php')) echo 'class="active"';

http://php.net/manual/de/function.in-array.php

答案 2 :(得分:0)

如果您没有包含faq的任何其他网页,您只需使用:

if (strpos($_SERVER['PHP_SELF'], 'faq') !== false)

请注意,我使用!== falsestrpos可以在字符串开头找到0时返回faq。您也应该将其用于其他比较。

否则,请使用@MrTweek的in_array解决方案。