17

我想检查是否:

  • 数组 isset 中的一个字段
  • 字段 === 真

if是否可以用一个语句来检查这一点?

检查是否===可以解决问题,但会抛出 PHP 通知。我真的必须检查该字段是否已设置,然后是否为真?

4

4 回答 4

31

如果您希望在单个语句中使用它:

if (isset($var) && ($var === true)) { ... }

如果您希望它处于单一条件

好吧,您可以忽略该通知(也就是使用该功能将其从显示中删除error_reporting())。

或者你可以用邪恶的@角色压制它:

if (@$var === true) { ... }

不推荐使用此解决方案

于 2011-10-26T20:03:21.397 回答
2

我认为这应该可以解决问题...

if( !empty( $arr['field'] ) && $arr['field'] === true ){ 
    do_something(); 
}
于 2011-10-26T20:02:27.080 回答
1

另类,只是为了好玩

echo isItSetAndTrue('foo', array('foo' => true))."<br />\n";
echo isItSetAndTrue('foo', array('foo' => 'hello'))."<br />\n";
echo isItSetAndTrue('foo', array('bar' => true))."<br />\n";

function isItSetAndTrue($field = '', $a = array()) {
    return isset($a[$field]) ? $a[$field] === true ? 'it is set and has a true value':'it is set but not true':'does not exist';
}

结果:

it is set and has a true value
it is set but not true
does not exist

替代语法:

$field = 'foo';
$array = array(
    'foo' => true,
    'bar' => true,
    'hello' => 'world',
);

if(isItSetAndTrue($field, $array)) {
    echo "Array index: ".$field." is set and has a true value <br />\n";
} 

function isItSetAndTrue($field = '', $a = array()) {
    return isset($a[$field]) ? $a[$field] === true ? true:false:false;
}

结果:

Array index: foo is set and has a true value
于 2011-10-26T20:21:32.437 回答
0

您可以简单地使用!empty

if (!empty($arr['field'])) {
   ...
}

这正好等价于德摩根定律你的条件。从PHP 的文档中,empty如果未设置变量或等效于FALSE

  isset(x) && x
  !(!isset(x) || !x)
  !empty(x)

如您所见,所有这三个语句在逻辑上都是等价的。

于 2020-11-20T05:24:56.523 回答