将相等性与多个值之一进行比较

时间:2014-01-24 22:27:54

标签: php

我将网址上的值传递到我网站上的某个页面。因此,当用户单击链接时,不同的值将传递到新页面,具体取决于他们单击的链接。我在第二页上使用条件来改变运行的代码,具体取决于$ _GET中的值。

不幸的是,由于我不了解的原因,条件似乎没有正常工作。在if语句中,我正在使用||因为有多个传递的值需要在第二页上触发相同的代码(它们需要以不同的方式命名,因为它们也都会触发唯一的代码)。

看起来很简单,我从:

开始
if($_GET['id']=('x' || 'y' || 'z')) {
block of code
}elseif($_GET['id']=('a' || 'b' || 'c')) {
block of code
}else{
block of code
}

我已打印出$ _GET ['id']的值,以根据点击的链接检查正确的值是从第一页传递到第二页。这工作正常。我点击的每个链接都会打印出预期值。奇怪的是,我在第一个条件和第一条件之上回显了这些值。它打印在两种情况下,即使它打印的值不应该触发该条件。有什么想法吗?

3 个答案:

答案 0 :(得分:3)

用于检查$_GET['id']是否是集合中有效值之一的语法是错误的。

我认为你的意思是做更像这样的事情:

<?php
if (in_array($_GET['id'], array('x', 'y', 'z') { 
    /* block 1*/ 
}
else if (in_array($_GET['id'], array('a', 'b', 'c')) { 
    /* block 2 */ 
}
else { 
    /* block 3 */ 
}

有关您所做的代码的更多信息:

它正在传递,因为语法有效,但不适合您想要做的事情。

基本上,您说“将$_GET['id']分配给truthy'a''b'的第一个'c'值。”问题在于,所有字符串(除非它们都是“0”)都被评估为真。

此外,单个等号符号(=)将值赋给变量并计算为true(赋值成功)。因此,您始终将$_GET['id']设置为('a' || 'b' || 'c')中的第一个字符串。因此,您要分配$_GET['id']并评估true,以便始终满足第一个if条件。

答案 1 :(得分:1)

if($_GET['id'] == 'x' || $_GET['id'] == 'y' || $_GET['id'] == 'z') {
    block of code
}elseif($_GET['id'] == 'a' || $_GET['id'] == 'b' || $_GET['id'] == 'c') {
    block of code
}else{
    block of code
}

答案 2 :(得分:1)

我认为你也可以使用switch语句。如下所示

$value = 'x'; // $_GET['id']
switch($value) { 
  //matches if one or more case is met
    case 'x':
    case 'y':
    case 'z':
        echo 'i am x, y or z';//here your block code
        break;
    //matches if one or more case is met
    case 'a':
    case 'b':
    case 'c':
        echo 'i am x, y or z';//here your block code

        break;

    default:
        echo 'I have no value';
}