- ベストアンサー
条件式の変数化
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 "アツイ"; という感じに、うまく一つのキーワードで一つの変数にまとめることはできないでしょうか? (ちなみに、上記のように書いて条件式に使ってみたのですがうまくいきませんでした…) なにか良い方法がありましたらご助力頂けると幸いです。 よろしくお願いします。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
そういう複雑な条件で処理する場合は、preg_match を使うのが簡単です。 $atui = "/暑い|あつい|あっつい|あつーい|アツイ/"; if (preg_match($atsui, $word)) echo "今日は暑いですね"; 詳しくは「正規表現」について勉強してほしいのですが、 例えば、 $atui = "/(暑|[あア][っッ]?[つツ])ー?[いイ]/"; としておけば、これだけで質問者さんが示したものだけでなく 「暑ーい」や「あっツーい」なども検出できるようになります。
その他の回答 (3)
そうですね、正規表現と関数の方がいいですね。
配列で、atui[]に調べる文字列を全部入れておいて、始めから終わりまで チェックする。 do { if(atui[x]=="あつい")echo "あつい" break; x++; } while(xxxx) みたいにすれば? または、 do { switch (atui[x]) case: atui[x]=="あつい" break: x++; }while() 適当に書きましたので文法は、PHPユーザ会とかで調べてください。
お礼
参考にさせていただきます。 回答ありがとうございました!
- yambejp
- ベストアンサー率51% (3827/7415)
先にstr_replaceしてからチェックしてみては?
お礼
回答ありがとうございました!
お礼
こちらの方法でうまく動作させることができました、ありがとうございます!! この機会に正規表現について、もっと理解を深めていきたいと思います。