Domanda Modo più semplice per verificare se la variabile non è uguale a più valori di stringa?


Codici attuali:

<?php

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

    // Do something

  }

?>

E:

<?php

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

    // Do something else

  }

?>

C'è un modo più semplice (cioè più breve) di scrivere le due condizioni?

NOTA: Sì, sono diversi e mi aspetto diversi modi per accorciare i codici.


44
2017-11-13 09:23


origine


risposte:


Per il tuo primo codice, puoi usare una breve modifica di la risposta data da  @ShankarDamodaran utilizzando in_array():

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

equivale a:

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

... ma più corto. Soprattutto se confronti più di "uk" e "in". Non uso una variabile addizionale (Shankar usò $ os) ma invece definiscono la matrice nella dichiarazione if. Alcuni potrebbero trovarlo sporco, lo trovo veloce e ordinato: D

Il problema con il tuo secondo codice è che può essere facilmente scambiato con VERO poiché:

if (true) {

equivale

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

Stai chiedendo se il valore di una stringa non è A o Not B. Se è A, non è sicuramente anche B e se è B non è sicuramente A. E se è C o letteralmente altro, è anche non A e non B. Quindi questa affermazione sempre (non tenendo conto della legge di schrödingers qui) restituisce true.


83
2017-11-13 09:59



Puoi fare uso di in_array() in PHP.

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

13
2017-11-13 09:25



Se stai pensando di costruire una funzione nella dichiarazione if, ti consiglierei anche l'uso di in_array. È molto più pulito.

Se stai tentando di assegnare valori alle variabili, puoi usare la stenografia if / else:

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

1
2017-11-13 09:33



È necessario un controllo a più valori. Prova ad usare il seguente codice:

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

1
2018-05-10 08:29