Reputation: 16906
I want to check if:
Is it possible to check this with one if
statement?
Checking if ===
would do the trick but a PHP notice is thrown. Do I really have to check if the field is set and then if it is true?
Upvotes: 17
Views: 75048
Reputation: 8688
You can simply use !empty
:
if (!empty($arr['field'])) {
...
}
This is precisely equivalent to your conditions by DeMorgan's law. From PHP's documentation, empty
is true iff a variable is not set or equivalent to FALSE
:
isset(x) && x
!(!isset(x) || !x)
!empty(x)
As you can see, all three of these statements are logically equivalent.
Upvotes: 0
Reputation: 175098
if (isset($var) && ($var === true)) { ... }
Well, you could ignore the notice (aka remove it from display using the error_reporting()
function).
Or you could suppress it with the evil @
character:
if (@$var === true) { ... }
This solution is NOT RECOMMENDED
Upvotes: 32
Reputation: 85378
Alternative, just for fun
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';
}
results:
it is set and has a true value
it is set but not true
does not exist
Alternative Syntax as well:
$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;
}
Results:
Array index: foo is set and has a true value
Upvotes: 2
Reputation: 83
I think this should do the trick ...
if( !empty( $arr['field'] ) && $arr['field'] === true ){
do_something();
}
Upvotes: 2