0

重複の可能性:
PHP で複数の値を比較する

誰かがこれを書くためのより良い方法を見つけるのを手伝ってくれませんか. ネストされたifよりも優れたものが必要であるかのように感じます。検索してみましたが、何を探しているのかわかりません。

このコードは、セッション変数「auth」が 0、1、2、または 3 と正確に等しくない場合、ログイン ページにリダイレクトすることを示しています。

if($_SESSION['auth']!=0){
   if($_SESSION['auth']!=1){
      if($_SESSION['auth']!=2){
         if($_SESSION['auth']!=3){
            header("location:login.php");
         }
      }
   }
}

私の最初の考えは、このようなことをすることでした。

if($_SESSION['auth']<=0 || $_SESSION['auth']>=3){
   header("location:login.php");
}

しかし、それは整数値の分数を考慮していません。整数値のみを許可したい。次に思ったのはこれ。

if($_SESSION['auth']!=0 && $_SESSION['auth']!=1 && $_SESSION['auth']!=2 && $_SESSION['auth']!=3){
   header("location:login.php")
}

しかし、この方法は、ネストされたすべての if と大差ありません。壊れていないものを修正しようとしているだけの場合はお知らせください。前もって感謝します。関連するトピック (できれば PHP マニュアル) へのリンクは、私が探しているすべてであり、解決策ではありません。

4

4 に答える 4

3

はい、そうです。より簡単なアプローチはinarray()です。

$values = array('0','1','2','3');
if(!in_array($_SESSION['auth'], $values, true)
//do something

またはさらに短い

if(!in_array($_SESSION['auth'], array('0','1','2','3'), true)
//do something

将来他の値と比較したい場合に備えて、おそらく最初のオプションを使用するのが最善です。

于 2012-10-20T20:15:52.460 に答える
2

チェックする値の配列を保持できます。

$auth_array = array('0', '1', '2', '3');
if(!in_array($_SESSION['auth'], $auth_array)){
    header("location:login.php");
}
于 2012-10-20T20:17:02.227 に答える
1

を使用して、探している値のいずれかと等しいin_arrayかどうかを簡単に確認できます。$_SESSION['auth']

if (in_array ($_SESSION['auth'], array (0,1,2,3)) == false)
  header ("Location: ...");
于 2012-10-20T20:16:17.560 に答える
0

あなた自身の解決策は問題ありません:

if($_SESSION['auth']<=0 || $_SESSION['auth']>=3){
   header("location:login.php");
}

10 進数の値について心配している場合でも、心配する必要はありません。コードで整数のみを設定する場合は、それだけで済みます。ただし、これが心配な場合は、値を型キャストして強制的に整数にします。

$_SESSION['auth'] = (int)$_SESSION['auth'];

分数の心配はもうありません。

于 2012-10-20T20:20:09.767 に答える