web-dev-qa-db-de.com

Einfachere Möglichkeit, zu überprüfen, ob die Variable nicht mehreren Zeichenfolgenwerten entspricht?

Aktuelle Codes:

<?php

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

    // Do something

  }

?>

Und:

<?php

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

    // Do something else

  }

?>

Gibt es eine einfachere (d. H. Kürzere) Möglichkeit, die beiden Bedingungen zu schreiben?

HINWEIS: Ja, sie sind unterschiedlich und ich erwarte verschiedene Möglichkeiten, die Codes zu verkürzen.

46
its_me

Für Ihren ersten Code können Sie eine kurze Änderung von der Antwort von @ShankarDamodaran mit in_array()

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

ist das gleiche wie:

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

... aber kürzer Vor allem, wenn Sie mehr als nur "uk" und "in" vergleichen. Ich verwende keine zusätzliche Variable (Shankar verwendete $ os), sondern definiere das Array in der if-Anweisung. Manche finden das schmutzig, ich finde es schnell und ordentlich: D

Das Problem mit Ihrem zweiten Code ist, dass er einfach mit TRUE ausgetauscht werden kann, da:

if (true) {

gleich

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

Sie fragen, ob der Wert einer Zeichenfolge nicht A oder Nicht B ist. Wenn es A ist, ist es definitiv nicht auch B, und wenn es B ist, ist es definitiv nicht A. Und wenn es C oder wörtlich etwas anderes ist, ist es auch nicht A und nicht B. Also stimmt diese Aussage immer (unter Berücksichtigung des schrödingers Gesetzes) nicht.

91
Andresch Serj

Sie können in_array() in PHP verwenden.

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

Sie müssen mehrere Werte überprüfen. Versuchen Sie es mit folgendem Code:

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

Wenn Sie planen, eine Funktion in der if-Anweisung zu erstellen, würde ich auch die Verwendung von in_array empfehlen. Es ist viel sauberer.

Wenn Sie versuchen, Variablen Werte zuzuweisen, können Sie die Abkürzung if/else verwenden:

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

Einige grundlegende Regex würde den Trick gut für $some_variable !== 'uk' && $some_variable !== 'in':

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