web-dev-qa-db-ja.com

変数が複数の文字列値と等しくないかどうかを確認する簡単な方法は?

現在のコード:

<?php

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

    // Do something

  }

?>

そして:

<?php

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

    // Do something else

  }

?>

2つの条件を記述するより簡単な(つまり短い)方法はありますか?

注:はい、それらは異なり、コードを短縮するさまざまな方法を期待しています。

53
its_me

最初のコードでは、 @ ShankarDamodaranによって与えられた答え の短い変更を使用できます in_array() を使用:

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

@Fortyがコメントで指摘しているように、PHP 5.4以降で使用可能な[]表記でさらに短く

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

次と同じです:

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

...しかし短い。特に、「uk」と「in」以上のものを比較する場合。追加の変数(Shankarは$ osを使用)を使用せず、代わりにifステートメントで配列を定義します。一部の人はそれが汚れていると感じるかもしれませんが、私はそれを迅速かつきちんと見つけます:D

2番目のコードの問題は、次の理由により、TRUEで簡単に交換できることです。

if (true) {

等しい

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

文字列の値がAではないかBではないかを尋ねています。Aである場合、Bでもありません。Bである場合は、Aでもありません。そして、Cまたは文字通り他の場合は、また、AでもBでもありません。そのため、このステートメントは常に(ここでシュレッダー法を考慮しない)trueを返します。

104
Andresch Serj

PHPで in_array() を使用できます。

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

複数の値をチェックする必要があります。次のコードを使用してみてください。

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

Ifステートメントで関数の構築を計画している場合は、in_arrayの使用もお勧めします。とてもきれいです。

変数に値を割り当てようとしている場合は、if/elseショートハンドを使用できます。

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

いくつかの基本的な正規表現は、$some_variable !== 'uk' && $some_variable !== 'in':に対してうまく機能します

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