ようこそ ゲスト さん、新規登録(無料)して気になる疑問を解決しませんか?

質問

QNo.4150228 if文などで使用される条件式で、同じような条件をまとめる方法
質問者:ikazuti $keyという変数には、aiueo、kakikukeko、sasisuseso、tatitutetoなどの文字列が入ると仮定して、if文でaiueo、sasisusesoの文字列の時のみ、実行させないようにしたい場合、通常は

if ($key != "aiueo" && $key != "sasisuseso") {
  処理
}

としなければなりません。しかし、これだともっと条件が多くなった場合、非常に見づらくなってしまいます。

「$keyと言う変数が、○○、××、■■、・・・以外の値の時」という条件を各場合、もっと簡潔にまとめて書く方法って無いでしょうか? 例えば、if ($key != ("aiueo" && "sasisuseso"))みたいな感じで。
(switchを使う手もありますが、これは他の変数($a == 0など)に関する条件を組み合わせたい場合、面倒になるので)

もし、方法などありましたら、教えていただければと思います。
困り度:
  • 困っています
質問投稿日時:
08/07/04 10:46
最新から表示回答順に表示

回答

ANo.3 $cond=array("aiueo" => 1,"kakikukeko" => 1);

if(empty($cond[$key])) {
処理
}

というのは、どうでしょう?
emptyの所はそのまま !$cond[$key] とも書けますが、こっちの方が意味が分かりやすいかも。

もし、このifがループの中で実行されるのでしたら、ループの外側で条件判定の配列を作った方がいいでしょう。また排除が必要な文字列が多くなった時、連想配列ですとあるかどうかの判定が一定時間でできます。整数キー配列ですと、ないことの判定は配列の要素全てを見に行く必要があります。

また、この方法ですと除外する文字列を外部ファイルから読むなどの処理もできます。
回答者:masa6272
種類:回答
どんな人:専門家
自信:自信あり
回答日時:
08/07/05 05:37
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.2 switch文では、こんな書き方もできます。

switch (true) {
  case $key != 'aioeo':
  case $key != 'sasisuseso':
    処理
    break;
  case $key == 'aiueo':
    処理
    break;
  default:
    break;
}

参考までに。
回答者:mookun2007
種類:アドバイス
どんな人:専門家
自信:参考意見
回答日時:
08/07/04 16:04
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)

回答

ANo.1 if(!in_array($key,Array('aiueo','kakikukeko','sasisuseso','tatituteto')))
回答者:yambejp
種類:アドバイス
どんな人:一般人
自信:参考意見
回答日時:
08/07/04 10:51
この回答への補足この回答に補足をつける(質問者のみ)
この回答へのお礼この回答にお礼をつける(質問者のみ)
 
最新から表示回答順に表示