• ベストアンサー

php if文の条件式の書き方

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

noname#217950
noname#217950
  • PHP
  • 回答数2
  • ありがとう数0

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

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4848/10262)
回答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

  • MQL4での条件文の書き方

    MT4でEA作成を勉強中です。 if文の条件で詰まっているので助けてください。 変数の宣言で double hensu_A1 ←値は何でもいいです double hensu_B1 ←値は何でもいいです double hensu_A2 ←値は何でもいいです double hensu_B2 ←値は何でもいいです double hensu_C  ←0.00 としていたとします。 if文の中で、 if ( hensu_A1 < hensu_B1 && hensu_A2 < hensu_B2) とした時はちゃんと機能しました。 また、 if ( hensu_A1 + 0 < hensu_B1 && hensu_A2 + 0 < hensu_B2) としても機能しました。 しかし、上の式の「0」を「hensu_C」に置き換えて if ( hensu_A1 + hensu_C < hensu_B1 && hensu_A2 + hensu_C < hensu_B2) とすると、機能しない(計算結果が正しくてもtrueを返さない)ようで困っています。 「hensu_C」の中身は0.00を入れてあるので、計算結果は同じになるはずです。 条件文の書き方が間違っているのでしょうか。 判る方おられましたら教えて頂けると助かります。

  • 条件式IF文を教えてほしいです。

    =IF(E16=E15,"〃",E16) 上記の条件式に、E15が空白ならE16も空白という条件式を追加していただけませんか? E15にデータがあったなら、空白でないなら、空白なら、どのような形になるのかわかりませんが、変更をお願いします!

  • if [ 条件式 ]とif[[ 条件式 ]]

    シェルスクリプトでのif [ 条件式 ] と if [[ 条件式 ]] の違いについて教えてください。 以下のシェルスクリプトを実行すると、 意図したとおり、111 と出力されます。 =========▼▼(ここから)▼▼========= #!/bin/sh AAA=yes if [[ "$AAA" = [yY]* ]] then echo 111 else echo 222 fi =========▲▲(ここまで)▲▲========= 上記、スクリプト3行目の if [[ "$AAA" = [yY]* ]] の部分を if [ "$AAA" = [yY]* ] というように、角カッコ 1重にすると、 エラーは発生しませんが、 222と表示されます。 if [ 条件式 ] と if [[ 条件式 ]] の違いについて教えていただけないでしょうか。

  • PerlでIF文の条件式をもっとスマートに書きたい

    PerlでIF文の条件式をもっとスマートに書きたいのですが。。。 以下のようなIF文の条件式を上手く書く方法がありますでしょうか? if($flg[0] == 1 || $flg[1] == 1 || $flg[2] == 1 || $flg[3] == 1 || $flg[4] == 1 || $flg[5] == 1 || $flg[6] == 1 || $flg[7] == 1 || $flg[8] == 1 || $flg[9] == 1)){ $flg[i]は配列@flgの各要素です。 上記のように「||」(論理和:または)でつないで書くのではなく、 もっとスマートに書きたいのですが、 何か良い方法はないでしょうか?? ご存じの方がいらっしゃいましたら、どうかご教示ください。 よろしくお願い致します。

  • if文などで使用される条件式で、同じような条件をまとめる方法

    $keyという変数には、aiueo、kakikukeko、sasisuseso、tatitutetoなどの文字列が入ると仮定して、if文でaiueo、sasisusesoの文字列の時のみ、実行させないようにしたい場合、通常は if ($key != "aiueo" && $key != "sasisuseso") {   処理 } としなければなりません。しかし、これだともっと条件が多くなった場合、非常に見づらくなってしまいます。 「$keyと言う変数が、○○、××、■■、・・・以外の値の時」という条件を各場合、もっと簡潔にまとめて書く方法って無いでしょうか? 例えば、if ($key != ("aiueo" && "sasisuseso"))みたいな感じで。 (switchを使う手もありますが、これは他の変数($a == 0など)に関する条件を組み合わせたい場合、面倒になるので) もし、方法などありましたら、教えていただければと思います。

    • ベストアンサー
    • PHP
  • if文の条件式について

    ASPのIf文の条件として varDateというある日付の入った変数を システム日付プラス1日より過去のものはtrueという 条件をつくりたいのですが、どう記述すればよろしいでしょうか? よろしくお願い致します。

  • If文の条件文の書き方

    お世話になります。 Excelでマクロを作成しております。 内容:  あるセルに、X<=300 というような条件を入れておきます。  ある値、たとえば、500 が来たときに、Xに代入して、  500<=300 という条件式を作り、それが、正しいか、正しくないか  の結果を求めたいと思っています。 このとき、if文の条件文は、値によって、変わらなくてはいけないので、 文字列の置き換え等をして、変数として条件文を作ると、「型が違います」 のエラーになります。 どのように条件文を作ればいいでしょうか?? hani = Cells(1,1).value 'セル1,1に、X<=300 が書かれています。 exp = Replace(hani, "X", 500) '"X"を500と置き換えます。 If exp Then Check = 0 Else Check = 1 End If よろしくお願いします。

  • 条件が複数ある場合のif文の書き方

    条件が一つだけの時は上手く動いたのですが、条件を複数にした場合はどう書いたらいいのかわからず、質問させていただきました。 『おしえて!!ACTION SCRIPT』という本を見ながら、Flashを作っています。 その中ではif文の書き方は if(条件式が正しかったら){  実行するスクリプト; } となっていますが、変数が複数あって、そのすべてが合致しないと指定のフレームに飛べないようにするためにはどう書いたらいいでしょうか? if(a==1){ gotoAndPlay(2); } if(b==1){ gotoAndPlay(2); } if(c==1){ gotoAndPlay(2); } と、続けて書くとa=1の時点でフレーム2に進んでしまうことになりますよね? そうでなく、a.b.c全ての変数が1の場合に、フレーム2に飛ぶようにしたいのです。 よろしくお願いします。

    • ベストアンサー
    • Flash
  • ifの条件式 Andを使用するものについて

    phpで、 $a="あいうえお"; $b="かきくけこ"; $c="かきくけこ"; と変数を三つ宣言しました。 上の変数三つを利用して、以下条件のif文を作りたいと思いました。  条件:$a変数 と $b変数が異なり、かつ $b変数 と $c変数の内容が同じとき「処理A」を実行させる。 ○作成したif文 if(($a <> $b) && ($b == $c)){  処理A } と記述したのですが、 ifブロック処理Aが実行されません。 なぜなのでしょうか…。 ご教授お願いします。

    • ベストアンサー
    • PHP
  • ifの条件式

    お世話になります。初歩的な質問とは思いますが、どうぞよろしくお願いします。 HTMLでのフォームの一部に次のようなラジオボタンの記述をしています。どちらか選んでCGIに渡し、「試験1」を選んだなら処理1を、「試験2」を選んだなら処理2を行いたいのですが、ifの条件式の書き方(ラジオボタンで選んだ方の値を受け取る変数の書き方)が分かりません。 ----HTML----------------------------------------- <input type="radio" name="test" value="テスト1"> 試験1 <input type="radio" name="test" value="テスト2"> 試験2 ----CGIスクリプトの一部-------------------------- if( ? ? ? =="テスト1"){ 処理1 }else{ 処理2 } ----------------------------------- ifの条件式の書き方を教えて下さい。 よろしくおねがいします。

    • ベストアンサー
    • Perl

専門家に質問してみよう