web-dev-qa-db-fra.com

Vérifiez si la variable existe et === true

Je veux vérifier si:

  • un champ dans le tableau isset
  • le champ === true

Est-il possible de vérifier cela avec une seule instruction if?

Vérification si === ferait l'affaire mais un PHP avis est lancé. Dois-je vraiment vérifier si le champ est défini et ensuite si c'est vrai?

15
Sebastian Sebald

Si vous le souhaitez dans une seule instruction :

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

Si vous le souhaitez dans une seule condition :

Eh bien, vous pouvez ignorer l'avis (aka le supprimer de l'affichage en utilisant la fonction error_reporting() ).

Ou vous pouvez le supprimer avec le caractère maléfique @ :

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

Cette solution est NON RECOMMANDÉE

29
Madara Uchiha

Je pense que cela devrait faire l'affaire ...

if( !empty( $arr['field'] ) && $arr['field'] === true ){ 
    do_something(); 
}
2
askome

Alternative, juste pour le plaisir

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';
}

résultats:

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

Syntaxe alternative également:

$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;
}

Résultats:

Array index: foo is set and has a true value
1
Phill Pafford