• ベストアンサー

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

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

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

  • ベストアンサー
  • masa6272
  • ベストアンサー率66% (93/140)
回答No.3

$cond=array("aiueo" => 1,"kakikukeko" => 1); if(empty($cond[$key])) { 処理 } というのは、どうでしょう? emptyの所はそのまま !$cond[$key] とも書けますが、こっちの方が意味が分かりやすいかも。 もし、このifがループの中で実行されるのでしたら、ループの外側で条件判定の配列を作った方がいいでしょう。また排除が必要な文字列が多くなった時、連想配列ですとあるかどうかの判定が一定時間でできます。整数キー配列ですと、ないことの判定は配列の要素全てを見に行く必要があります。 また、この方法ですと除外する文字列を外部ファイルから読むなどの処理もできます。

ikazuti
質問者

お礼

なるほど、このやり方は汎用性があって良さそうです。 ありがとうございます。

その他の回答 (2)

回答No.2

switch文では、こんな書き方もできます。 switch (true) {   case $key != 'aioeo':   case $key != 'sasisuseso':     処理     break;   case $key == 'aiueo':     処理     break;   default:     break; } 参考までに。

ikazuti
質問者

お礼

なるほど。処理が決まっているなら、そういうやり方もOKかもしれませんね。参考にさせていただきます。 ありがとうございました。

  • yambejp
  • ベストアンサー率51% (3827/7415)
回答No.1

if(!in_array($key,Array('aiueo','kakikukeko','sasisuseso','tatituteto')))

ikazuti
質問者

お礼

ありがとうございます。

関連するQ&A