条件分岐(if)についてお聞きしたことがあります。
例えば
if($a == 'A' || $a == 'B'){
処理
}else if($a == 'C' || $a == 'D' || $a == 'E'){
処理
}...............
といった条件分岐があったとて、お聞きしたいことが2点あります。
・条件分岐この後も数十個続いたとします。その場合もelse ifで一つ一つ
条件を書かなければならないのでしょうか?
・条件式if($a == 'A' || $a == 'B'....)が長くなる場合プログラムが見にくくなるので
別途に条件式を書いておいてif文の所では($a == ◯)といったように簡潔に書くことは
できないのでしょうか?
宜しくお願いします。
No.2ベストアンサー
- 回答日時:
・条件分岐この後も数十個続いたとします。
その場合もelse ifで一つ一つ条件を書かなければならないのでしょうか?
あるいは#1の回答にあるようにswitchを使うかでしょう。
三項演算子はよほど気をつけて使わないと何をしているのか意味不明なコードを量産するので、素人にはお勧めできません。
・条件式if($a == 'A' || $a == 'B'....)が長くなる場合プログラムが見にくくなるので
別途に条件式を書いておいてif文の所では($a == ◯)といったように簡潔に書くことは
できないのでしょうか?
$a == ○という書き方はできませんが、条件判定をする関数なら書けます。
function condition1($a) {
return $a == 'A' || $a == 'B';
}
if (condition1($a)) {
処理
}
のような感じで。
あるいは、連想配列を作って、キーにマッチした場合に特定の処理をするという場合はこういう書き方もできます。
function normal_print($x) {
echo $x;
}
function hello_print($x) {
echo "hello " . $x;
}
$rules = array(
'A' => normal_print,
'B' => hello_print,
'C' => hello_print,
);
$in = 'B';
foreach ($rules as $charactor => $procedure) {
if ($in == $charactor) { $procedure($in); }
}
こうすると、連想配列のキー一つ一つとマッチングをとって、マッチした場合は値として入っている関数を呼び出します。なお、関数が実行されるのは別のスコープになるので引数でちゃんと必要な値を渡しておく必要があり、元の環境の値を変更する場合はそういう処理を書かなくてはいけません。
上記二つを組み合わせて、ある条件にマッチしたら、所定の処理をさせることもできます。
$rules =
array(
// condition, procedure.
array(
function($x) { return $x == 'A' || $x == 'B'; },
function($x) { return 'This is ' . $x; }),
array(
function($x) { return $x == 'C' || $x == 'D'; },
function($x) { return 'My name is ' . $x; }),
);
$in = 'B';
foreach ($rules as $rule) {
$condition = $rule[0];
$procedure = $rule[1];
if ($condition($in)) { print $procedure($in); }
}
こうすると条件式と処理を一カ所でまとめて管理できます。
参考までに。
No.4
- 回答日時:
まず$aがAであった場合$aはC~Eにはならないのでelseはいりません
それだけで構造はだいぶ簡潔になります
また同じ変数をorで確認するだけならswitchかin_arrayで処理すると
ソースも見やすくなります
if(in_array($a,array('A','B'))) 処理1;
if(in_array($a,array('C','D','E'))) 処理2;
No.3
- 回答日時:
> ・条件分岐この後も数十個続いたとします。
その場合もelse ifで一つ一つ条件を書かなければならないのでしょうか?if~else ifを使うなら、書かなければならない。ただし、本当にそれだけの条件分岐が必要な場合。
その前の段階で、整理しておくのがよいでしょう。
例えば、
if($a == 'A' || $a == 'B'){
$data='DATA1' ;
}else if($a == 'C' || $a == 'D' || $a == 'E'){
$data='DATA2' ;
}..............
とかだったら、あらかじめ対応表を配列にしておいて
$data=$table[$a] ;
みたいにすればすっきりする。
例えば、特定のパターンがあって、正規表現を使って表現できるものなら
if( preg_match('/^[AB]$/',$a) === 1 ) {
処理1 ;
}
のような方法もある。
どの方法が使えるかは、そのケース次第です。万能の方法はありません。
本当に条件が複雑で、まとめられなければ、if~else ifを数十個続けるくらいしかありません。
# でも、その場合は、やりかた自体を根本的に考え直した方がいいです。
No.1
- 回答日時:
詳細なやりたいことが分からいので、参考にならなかったらすみません。
以下のサイトを参考にしてみてください。
switch文を使う方法。
三項演算子を使う方法。
参考URL : http://www.php-labo.net/tutorial/php/if.html#swi …
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# c言語 1 2022/11/09 13:05
- C言語・C++・C# C言語 3 2022/11/09 13:27
- PostgreSQL DBFluteについて質問です。 環境:PostgreSQL java8 前提:webアプリケーショ 1 2022/07/07 00:49
- PHP PHP・Wordpress preg_replaceを条件分岐で処理させる方法が知りたい 1 2023/05/01 14:25
- Excel(エクセル) IFERROR(IF()IF())のような形の構文が作れません 2 2023/02/05 17:51
- C言語・C++・C# numpyスライス機能を使った数値計算 2 2023/05/08 16:01
- Visual Basic(VBA) VBA エクセル 条件の設定 1 2022/03/28 10:24
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
こちらはただの直列処理ですか?
-
phpでcookieがうまく保存されない
-
PHPで画像の渡しが上手く行きま...
-
PHPでこのコード自体に意味は無...
-
Q&Aサイトを作成していてURLの...
-
クエリObjectをforeachで回す時...
-
phpでPEAR::DBを使っているので...
-
reuterの記事をbeautiful.soup....
-
phpでクラスのメソッドで同名の...
-
PHP8を使うと、大量のWarningが...
-
SFTPなどは使わないホームペー...
-
awsにApacheとPHPを入れて、何...
-
phpのクラスメソッドの定義が長...
-
PHPで訪問回数を表示するカウン...
-
PHPを使って、別サイトの一部を...
-
jpgraphで表示されない
-
PHP MySQLに画像を直接保存
-
PHPとHTML+Xamppの掲示板で画像...
-
index.phpって何ですか? 具体...
-
index.phpに入るには、どうすれ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
phpでcookieがうまく保存されない
-
index.phpに入るには、どうすれ...
-
PHP8を使うと、大量のWarningが...
-
PHPSpreadsheetを使って関数を...
-
重複を防ぐ記述について教えて...
-
index.phpって何ですか? 具体...
-
awsにApacheとPHPを入れて、何...
-
phpでPEAR::DBを使っているので...
-
php 確認表示画面で値をSESSION...
-
PHPでユーザー情報を入力して簡...
-
ワードプレスサイト PHP8.0.25...
-
php 完了画面の送信メールのコ...
-
SFTPなどは使わないホームペー...
-
PHPのセッション有効期限について
-
csvファイルについて教えて下さ...
-
PHPとHTML+Xamppの掲示板で画像...
-
PHPで訪問回数を表示するカウン...
-
ファイルアップロードに関して...
-
掲示板を作成しておりアップロ...
-
Q&Aサイトを作成していてURLの...
おすすめ情報