PHP:检查变量是否存在,但是如果值等于某个值

Mar*_*elo 36 php variables if-statement isset

我有(或没有)$_GET['myvar']来自我的查询字符串的变量,我想检查这个变量是否存在,以及该值是否与if语句中的内容相对应:

我正在做和想的不是最好的方法:

if(isset($_GET['myvar']) && $_GET['myvar'] == 'something'): 做一点事

我的问题是,在没有声明变量两次的情况下,有没有办法做到这一点?

这是一个简单的案例,但想象一下,必须比较许多$myvar变量.

mel*_*oon 18

可悲的是,这是唯一的方法.但是有一些方法可以处理更大的数组.例如这样的事情:

$required = array('myvar', 'foo', 'bar', 'baz');
$missing = array_diff($required, array_keys($_GET));
Run Code Online (Sandbox Code Playgroud)

变量$ missing现在包含一个必需值的列表,但$ _GET数组中缺少这些值.您可以使用$ missing数组向访问者显示消息.

或者您可以使用类似的东西:

$required = array('myvar', 'foo', 'bar', 'baz');
$missing = array_diff($required, array_keys($_GET));
foreach($missing as $m ) {
    $_GET[$m] = null;
}
Run Code Online (Sandbox Code Playgroud)

现在每个必需元素至少有一个默认值.您现在可以使用if($ _ GET ['myvar'] =='something')而不必担心密钥未设置.

更新

另一种清理代码的方法是使用一个检查值是否已设置的函数.

function getValue($key) {
    if (!isset($_GET[$key])) {
        return false;
    }
    return $_GET[$key];
}

if (getValue('myvar') == 'something') {
    // Do something
}
Run Code Online (Sandbox Code Playgroud)


Nic*_*ick 15

从 PHP7 开始,您可以使用空合并运算符 ??来避免双重引用:

$_GET['myvar'] = 'hello';
if (($_GET['myvar'] ?? '') == 'hello') {
    echo "hello!";
}
Run Code Online (Sandbox Code Playgroud)

输出:

hello!
Run Code Online (Sandbox Code Playgroud)

一般来说,表达式

$a ?? $b
Run Code Online (Sandbox Code Playgroud)

相当于

isset($a) ? $a : $b
Run Code Online (Sandbox Code Playgroud)


小智 14

如果您正在寻找一个单行检查变量的值,您还不确定是否已设置,这可行:

if ((isset($variable) ? $variable : null) == $value) { }
Run Code Online (Sandbox Code Playgroud)

唯一可能的缺点是,如果您正在测试true/ false- null将被解释为等于false.

  • 最好建议`===`而不是`==`,因为它没有你提到的缺点. (5认同)
  • 如果你使用 PHP7,它会更简单`if (($variable ?? null) === $value)`。 (3认同)