質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

解決済

8回答

3690閲覧

phpでどちらでもなかった場合の判定の省略した書き方

enigumalu

総合スコア192

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

1クリップ

投稿2017/05/31 08:25

ifの条件式で変数の値がONでもOFFでもない値が来た場合の処理を書きたいのですが、下記のようにオーソドックスに&&で区切る以外の方法はありませんでしょうか。書き方がくどいので一瞥して何がしたいかわかりにくいため複合条件の省略した書き方を探しています。

if ($test !== 'ON' && $test !== 'OFF') { throw new Exception('どちらでもない'); }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答8

0

ベストアンサー

FILTER_VALIDATE_BOOLEAN フィルタおよび FILTER_NULL_ON_FAILURE フラグを使うのがおすすめです。

PHP: 検証フィルタ - Manual

"1""true""on" および "yes" の場合に TRUE、 それ以外の場合に FALSE を返します。

FILTER_NULL_ON_FAILURE が設定されている場合は、 FALSE が返されるのは "0""false""off""no" および "" の場合のみとなります。 boolean 以外の値については NULL を返します。

厳密には "on" "off" だけではありませんが、"1""0" も同等に扱ったほうが便利な場合が多いです。論理値を文字列に変換したときはこうなるので。また、大文字と小文字は区別されません

php

1$bool = filter_var($test, FILTER_VALIDATE_BOOLEAN, FILTER_NULL_ON_FAILURE); 2if ($bool === null) { 3 throw new \Exception('どちらでもない'); 4} 5var_dump($bool); // bool(true) か bool(false) のいずれか

投稿2017/05/31 15:02

編集2017/05/31 15:11
mpyw

総合スコア5223

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mpyw

2017/05/31 15:46

この方法のきれいなところは、あらゆる型のあらゆる値を TRUE / FALSE / NULL のいずれか3通りまで落とし込んでくれるところにありますね。フィルタを名乗るだけあって有能です。
motuo

2017/06/01 00:49

恥ずかしながら、この命令知りませんでした… 確かに有能な機能ですね!
enigumalu

2017/06/02 00:19

ありがとうございます。こういった関数があることを期待していたのですがズバリです
guest

0

こういう書き方もあります。

PHP

1if ( !in_array( $test, [ 'ON', 'OFF' ], true ) ) {}

【PHP: in_array - Manual】
http://php.net/manual/ja/function.in-array.php

【PHPのin_arrayは罠が多いので注意喚起が必要 - Qiita】
http://qiita.com/tadsan/items/2a4c3e6b0b74a408c038

投稿2017/05/31 08:29

編集2017/05/31 09:28
kei344

総合スコア69407

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

enigumalu

2017/05/31 09:24

最初に思いついたのがin_arrayで結局これが一番わかりやすい気がしているのですが in_arrayって配列に値があるかチェックするという仕様記載なので、 文字列に配列の値があるかという利用だと後から見た人がどう思うのかなとちょっと悩んでます
guest

0

正規表現でフィルタする場合はこうです

if(filter_var($test,FILTER_VALIDATE_REGEXP,["options"=>["regexp"=>"/^(ON|OFF)$/"]])!==false){ }

投稿2017/05/31 08:51

yambejp

総合スコア114833

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

頻繁に使うなら関数にするのもいいかも?

PHP

1function is_normal($x) { 2 if (!isset($x)) return false; 3 if (!is_string($x)) return false; 4 if ($x == 'ON') return true; 5 if ($x == 'OFF') return true; 6 return false; 7} 8 9 10if (!is_normal($test)) { 11 throw new Exception('どちらでもない'); 12}

投稿2017/05/31 10:35

編集2017/05/31 10:36
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

じゃ、こっちでw

php

1<?php 2$switch = [ 3 'ON' => true, 4 'OFF' => true 5 ]; 6$test=''; 7if (!isset($switch[$test])) { 8 throw new Exception('どちらでもない'); 9}

投稿2017/05/31 08:48

編集2017/05/31 08:53
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

分かり易く伝える、という意味では下記ではどうでしょうか?

php

1if ($test === 'ON') { 2 //ONの処理 3} elseif ($test === 'OFF') { 4 //OFFの処理 5}else{ 6 throw new Exception('どちらでもない'); 7}

投稿2017/05/31 08:34

motuo

総合スコア3027

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

php

1if (!preg_match("/^(ON|OFF)$/", $test )) { 2 throw new Exception('どちらでもない'); 3}

比較候補が3つ4つになってきたら正規表現で書いたほうが !== と && をたくさん並べるよりも見やすくなるかなと思いますが、ON/OFFの2つなら対して変わらないですね。

投稿2017/05/31 14:18

oskbt

総合スコア1895

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

phpでどちらでもなかった場合の判定の省略した書き方

IFではないですが、こういう書き方もできますね

switch ($test) { case 'OK': case 'NG': # 何もしない場合は何も書かない break; default: # どちらでもない時の処理 break; }

投稿2017/05/31 08:50

raichi

総合スコア278

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KiyoshiMotoki

2017/05/31 09:27

横から失礼します。 $test = 0 のとき、このコードは case 句が実行されてしまいますよ。 なぜなら、PHP の switch構文は緩やかな比較(`==`による比較のこと)を行うからです。 http://php.net/manual/ja/control-structures.switch.php > 注意: > switch/case が行うのは、 緩やかな比較 であることに注意しましょう。 http://php.net/manual/ja/language.operators.comparison.php > 整数値を文字列と比較したり、比較に数値形式の文字が含まれる場合は、文字列が 数値に変換され、 数値としての比較を行います。 http://php.net/manual/ja/language.types.string.php#language.types.string.conversion > 文字列の最初の部分により値が決まります。文字列が、 有効な数値データから始まる場合、この値が使用されます。その他の場合、 値は 0 (ゼロ) となります。
raichi

2017/06/06 09:54

おっと、コメント気が付きませんでした、そういやそうでしたね。 厳密にやりたけりゃ switch (true) { case $test === 'OK': case $test === 'NG': # 何もしない場合は何も書かない break; default: # どちらでもない時の処理 break; } とかですかね。 よっぽど&&で同じ条件つかない限り、普通にif文書いたほうがよさそうですが。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問