web-dev-qa-db-fra.com

Un moyen plus simple de vérifier si variable n'est pas égal à plusieurs valeurs de chaîne?

Codes actuels:

<?php

  // See the AND operator; How do I simplify/shorten this line?
  if( $some_variable !== 'uk' && $some_variable !== 'in' ) {

    // Do something

  }

?>

Et:

<?php

  // See the OR operator; How do I simplify/shorten this line?
  if( $some_variable !== 'uk' || $some_variable !== 'in' ) {

    // Do something else

  }

?>

Existe-t-il un moyen plus simple (c’est-à-dire plus court) d’écrire les deux conditions?

NOTE: Oui, ils sont différents, et je m'attends à différentes manières de raccourcir les codes.

46
its_me

Pour votre premier code, vous pouvez utiliser une brève modification de la réponse donnée par @ShankarDamodaran using in_array() :

if ( !in_array($some_variable, array('uk','in'), true ) ) {

est le même que:

if ( $some_variable !== 'uk' && $some_variable !== 'in' ) {

... mais plus courte. Surtout si vous comparez plus que juste «uk» et «in». Je n’utilise pas de variable supplémentaire (Shankar a utilisé $ os) mais je définis le tableau dans l’instruction if. Certains pourraient trouver cela sale, je le trouve rapide et soigné: D

Le problème avec votre deuxième code est qu’il peut être facilement échangé avec juste TRUE puisque:

if (true) {

équivaut à

if ( $some_variable !== 'uk' || $some_variable !== 'in' ) {

Vous demandez si la valeur d'une chaîne n'est pas A ou Non B. Si c'est A, ce n'est certainement pas aussi B et si c'est B, c'est certainement pas A. Et si c'est C ou littéralement autre chose, c'est aussi pas A et pas B. Donc cette déclaration toujours (ne tenant pas compte de la loi de schrödingers ici) retourne vrai.

91
Andresch Serj

Vous pouvez utiliser in_array() en PHP.

$os = array("uk", "us"); // You can set multiple check conditions here
if (in_array("uk", $os)) //Founds a match !
{
    echo "Got you"; 
}
15
Shankar Damodaran

Vous devez vérifier plusieurs valeurs. Essayez d'utiliser le code suivant:

<?php
    $illstack=array(...............);
    $val=array('uk','bn','in');
    if(count(array_intersect($illstack,$val))===count($val)){ // all of $val is in $illstack}
?>
1
illeas

Si vous envisagez de créer une fonction dans l'instruction if, je conseillerais également l'utilisation de in_array. C'est beaucoup plus propre.

Si vous essayez d'affecter des valeurs à des variables, vous pouvez utiliser le raccourci if/else:

$variable_to_fill = $some_variable !== 'uk' ? false : true;
1
Fyntasia

Certaines expressions rationnelles de base feraient bien l'affaire pour $some_variable !== 'uk' && $some_variable !== 'in':

if(!preg_match('/^uk|in$/', $some_variable)) {
    // Do something
}
0
Eternal Darkness