我有(或没有)一个来自我的查询字符串的变量$_GET['myvar'],我想检查这个变量是否存在,以及它的值是否与if语句中的某个值相对应:
我所做的和所想的并不是最好的方法:
if(isset($_GET['myvar']) && $_GET['myvar'] == 'something'):做点什么
我的问题是,有没有办法在不两次声明变量的情况下做到这一点?
这是一个简单的例子,但想象一下,必须比较许多这样的$myvar变量。
发布于 2010-10-24 18:05:17
可悲的是,这是唯一的方法。但是有一些方法可以处理更大的数组。例如,如下所示:
$required = array('myvar', 'foo', 'bar', 'baz');
$missing = array_diff($required, array_keys($_GET));变量$missing现在包含$_GET数组中缺少的必需值的列表。您可以使用$missing数组向访问者显示一条消息。
或者你可以使用类似这样的东西:
$required = array('myvar', 'foo', 'bar', 'baz');
$missing = array_diff($required, array_keys($_GET));
foreach($missing as $m ) {
$_GET[$m] = null;
}现在,每个必需的元素至少都有一个默认值。您现在可以使用if($_GET‘’myvar‘== 'something'),而不用担心没有设置密钥。
更新
清理代码的另一种方法是使用一个检查是否设置了值的函数。
function getValue($key) {
if (!isset($_GET[$key])) {
return false;
}
return $_GET[$key];
}
if (getValue('myvar') == 'something') {
// Do something
}发布于 2016-08-19 01:12:29
如果您正在寻找一行程序来检查您还不确定是否设置了变量的值,这是可行的:
if ((isset($variable) ? $variable : null) == $value) { }唯一可能的缺点是,如果您正在测试true/false - null将被解释为等于false。
发布于 2018-11-24 12:57:28
从PHP7开始,您可以使用Null Coalescing Operator ??来避免双重引用:
$_GET['myvar'] = 'hello';
if (($_GET['myvar'] ?? '') == 'hello') {
echo "hello!";
}输出:
hello!一般而言,表达式
$a ?? $b等同于
isset($a) ? $a : $bhttps://stackoverflow.com/questions/4007752
复制相似问题