PHP if语句 - 选择两个不同的get变量?

时间:2010-03-14 03:49:03

标签: php if-statement

以下是我的示例脚本:

<li><a <?php if ($_GET['page']=='photos' && $_GET['view']!=="projects"||!=="forsale") { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li>
<li><a <?php if ($_GET['view']=='projects') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=projects\""); } ?>>Projects</a></li>
<li><a <?php if ($_GET['view']=='forsale') { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos&view=forsale\""); } ?>>For Sale</a></li>

我希望PHP只在不在两个页面上时回显“href =”#“class =”active“

?page = photos&amp; view = forsale

页=相片和?视图=项目

我也试过这个并且它不起作用:

<li><a <?php if ($_GET['page']=='photos' && ($_GET['view']!=='projects' || $_GET['view']!=='forsale')) { echo ("href=\"#\" class=\"active\""); } else { echo ("href=\"/?page=photos\""); } ?>>Photos</a></li>

4 个答案:

答案 0 :(得分:3)

你做不到:

if ($var !== 'a' || !== 'b') ...

你必须这样做:

if ($var !== 'a' || $var !== 'b') ...

如果您想清理该代码,我建议:

function active_view($content, $url, $view) {
  if ($_GET['view'] == $view) {
    return link($content, '#', 'active');
  } else {
    return link($content, $url);
  }
}

function active_page_view() {
  $args = func_get_args();
  $content = array_shift($args);
  $url = array_shift($args);
  $page = array_shift($args);
  if ($_GET['page'] == $page && !in_array($view, $args)) {
    return link($content, '#', 'active');
  } else {
    return link($content, $url);
  }
}

function link($content, $href, $class) {
  $ret = '<a href="' . $href . '"';
  if ($class) {
    $ret .= ' class="' . $class . '"';
  }
  $ret .= '>' . $content . '</a>';
  return $ret;
}

然后您的代码变为:

<li><?php echo active_page_view('Photos', '/?page=photos', 'photos', 'projects', 'forsale'); ?></li>
<li><?php echo active_view('Projects', '/?page=photos&view=projects', 'projects'); ?></li>
<li><?php echo active_view('For Sale', '/?page=photos&view=forsale', 'project'); ?></li>

以上是说明性的,而不是最终和完整的。我想要了解的一点是你想养成使用某种模板机制的习惯,即使你不使用模板库(例如Smarty)。您很少想将复杂的逻辑嵌入到基本上是视图中。如果您使用函数库(或对象)来创建标记,它会为您提供大量控制以逃避特殊字符,自动放入属性,验证您放入的内容或其他内容。

在此示例中,您可能希望拥有一个表示您的网站导航的数据结构,您可以在其中输入当前页面的内容,并在动态构建导航并自动操作链接时将其与所有条目进行比较。

答案 1 :(得分:2)

除了问题,克莱图斯指出你还有precedence of the operators的问题。 &安培;&安培;优先级高于||。因此

if (
  $_GET['page']=='photos'
  && $_GET['view']!=="projects"
  || $_GET['view']!=="forsale"
)

相当于

if (
  ( $_GET['page']=='photos' && $_GET['view']!=="projects" )
  || $_GET['view']!=="forsale"
)

但你显然想要

if (
  $_GET['page']=='photos'
  && ( $_GET['view']!=="projects" || $_GET['view']!=="forsale" )
)

也许不是两种选择,但如果你有更多的选择,你可能要考虑使用!in_array()。 e.g。

if (
  'photos'=$_GET['page']
  && !in_array($_GET['view'], array("projects","forsale"))
)

答案 2 :(得分:0)

&lt;?php $ view = $ _GET ['view'];
   if($ _ GET ['page'] =='photos'&amp;&amp;($ view =='projects'|| $ view =='forsale'))
   {
     echo'&lt; li&gt;&lt; a href =“#”class =“active”&gt;照片&lt; / a&gt;&lt; / li&gt;';
   }    否则
   {
     echo'&lt; li&gt;&lt; a href =“/?page = photos”&gt;照片&lt; / a&gt;&lt; / li&gt;';
   }?&gt;

答案 3 :(得分:0)

if( $_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "forsale") {
   ...
} 
else if( $_GET[ 'page' ] != "photos" && $_GET[ 'view' ] != "projects") {
    ...
}