• ベストアンサー

条件式の変数化

phpにて、いくつかのキーワードを変数で設定しておき、 文中にそのキーワードがあるかどうか判定し、そのキーワードによって処理を変えていくというプログラムを作成しています。 プログラムは、strposによるキーワード判定と、switchによる処理を組み合わせたものです。 //【キーワードの設定】 //「暑い」 $atui = "暑い"; $atui2 = "あつい"; $atui3 = "あっつい"; $atui4 = "あつーい"; //「寒い」 $samui = "寒い"; $samui2 = "さむい"; $samui3 = "さっむーい"; $samui4 = "さむーい"; //【判定対象の文章】 $word = "外は暑いなあ" switch (true) { //【「暑い」の場合の処理】 case (strpos($word, $atui1) !== false) || (strpos($word, $atui2) !== false) || (strpos($word, $atui3) !== false) || (strpos($word, $atui4) !== false) || : echo "今日は暑いですね"; break; //【「寒い」の場合の処理】 case (strpos($word, $samui1) !== false) || (strpos($word, $samui2) !== false) || (strpos($word, $samui3) !== false) || (strpos($word, $samui4) !== false) || : echo "今日は寒いですね"; break; } キーワード認識に幅を持たせたいので変数を何個も設定しています。 上記コードのように『暑い』だったら、「あつい」「あっつい」「あつーい」「アツイ」などをそれぞれ個別に変数化し いずれかが含まれていたら「暑い」の処理を実行するという感じです。 キーワードが少ないうちはいいんですが、多くなってくると 個別に設定している変数が膨大になってきて収集がつかなくなってきている状態です。 条件式も、複数のキーワードを組み合わせた判定を書こうとすると、ものすごい長さになってしまいますし… $atui = "暑い" or "あつい" or "あっつい" or "あつーい" or "アツイ"; という感じに、うまく一つのキーワードで一つの変数にまとめることはできないでしょうか? (ちなみに、上記のように書いて条件式に使ってみたのですがうまくいきませんでした…) なにか良い方法がありましたらご助力頂けると幸いです。 よろしくお願いします。

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

  • ベストアンサー
  • mtaka2
  • ベストアンサー率73% (867/1179)
回答No.3

そういう複雑な条件で処理する場合は、preg_match を使うのが簡単です。 $atui = "/暑い|あつい|あっつい|あつーい|アツイ/"; if (preg_match($atsui, $word)) echo "今日は暑いですね"; 詳しくは「正規表現」について勉強してほしいのですが、 例えば、 $atui = "/(暑|[あア][っッ]?[つツ])ー?[いイ]/"; としておけば、これだけで質問者さんが示したものだけでなく 「暑ーい」や「あっツーい」なども検出できるようになります。

rai28
質問者

お礼

こちらの方法でうまく動作させることができました、ありがとうございます!! この機会に正規表現について、もっと理解を深めていきたいと思います。

その他の回答 (3)

noname#119957
noname#119957
回答No.4

そうですね、正規表現と関数の方がいいですね。

noname#119957
noname#119957
回答No.2

配列で、atui[]に調べる文字列を全部入れておいて、始めから終わりまで チェックする。 do { if(atui[x]=="あつい")echo "あつい" break; x++; } while(xxxx) みたいにすれば? または、 do { switch (atui[x]) case: atui[x]=="あつい" break: x++; }while() 適当に書きましたので文法は、PHPユーザ会とかで調べてください。

rai28
質問者

お礼

参考にさせていただきます。 回答ありがとうございました!

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

先にstr_replaceしてからチェックしてみては?

rai28
質問者

お礼

回答ありがとうございました!

関連するQ&A

専門家に質問してみよう