• ベストアンサー

php if文の条件式の書き方

同じ変数に対する条件式ってまとめて書けないのでしょうか? if($hensu!=1 && $hensu!=20 && $hensu!=30){ ~~~~~ } みたいな条件が書きたい時に $hensu!=1 && 20 && 30 みたいな書き方はできないのでしょうか?上記の書き方ではダメですが。 なにか上の書き方よりスマートに書ける方法があれば教えて頂けないでしょうか。

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10359)
回答No.1

短く書く手段はありません。 3つくらいならお書きのやり方が一番です。 たくさんある場合は、「配列の中にあるか?」という関数の否定を使って、 if(! in_array($hensu,array(1,20,30,......))) { のように書くのがいいかと。

その他の回答 (1)

noname#244856
noname#244856
回答No.2

条件3つ以上なら既に回答にあるようにin_arrayを使いますね。但し「ゆるやかな比較」には注意してください。尤も、「!==」ではなく「!=」を使わているようなのでまだその恐ろしさをご存知ではないようですが… PHP Manual - 比較演算子 http://php.net/manual/ja/language.operators.comparison.php#language.operators.comparison この結果に納得できますか?↓ var_dump(0 == "a"); // 0 == 0 -> true var_dump("1" == "01"); // 1 == 1 -> true var_dump("10" == "1e1"); // 10 == 10 -> true var_dump(100 == "1e2"); // 100 == 100 -> true in_arrayはこれと同じようにデフォルトでは緩やかな比較を行うので、もし厳密な比較に切り替えたい場合は第3引数にtrueを渡してください。動作速度も基本的にこちらのほうが速いはずです。 if (!in_array($var, [1, 20, 30], true)) { ... } 違うアプローチとしてはビット演算があるでしょう。もし変数に代入される値を 1, 2, 4, 8, 16, 32, ... と2の累乗に限定するのであれば、もっと鮮やかに書くことが出来ます。以下の2つはほぼ同じ意味です。 if (!in_array($var, [1, 4, 32])) { ... } if (!($var & (1 | 4 | 32))) { ... } 一般的には代入されうる値を全てconstまたはdefineを使って定義しておくという手法がよく用いられます。PHPの組み込み関数にも使われていることが多いです。

関連するQ&A

専門家に質問してみよう