• ベストアンサー

switch文の関数化

今私は検索キーワードごとに対応するURLを読み込むプログラムを作っています。 そこでキーワードをURLから取得しているのですが、検索エンジンのホストによってURLのクエリの属性?が違うのです。 ホストごとに対応したクエリ属性?を使えるようにswitchで条件を分けています。うまくいったのですが、ソースが長いので関数化しようと思ったのですが・・・うまくいきません。 もしよければアドバイスいただけないでしょうか? 以下ソース switch($parseUrl['host']) { case 'www.google.co.jp': $query_q = urldecode($parseQuery['q']); $encoding = mb_detect_encoding($query_q,'auto'); $rst_query = mb_convert_encoding($query_q,'EUC-JP',$encoding); $keyword = urldecode($rst_query); break; case 'search.yahoo.co.jp': $query_q = urldecode($parseQuery['p']); $encoding = mb_detect_encoding($query_q,'auto'); $rst_query = mb_convert_encoding($query_q,'EUC-JP',$encoding); $keyword = urldecode($rst_query); break;     ・     ・     ・  登録した検索エンジンのホストをすべて打ち込む 関数のソース function checkQuery($host,$key) { case $host: $query_q = urldecode($parseQuery[$key]); $coding = mb_detect_encoding($query_q,'auto'); $rst_query = mb_convert_encoding($query_q,'EUC-JP',$coding); $keyword = urldecode($rst_query); break; } うまくいきません。 引数が悪いのでしょうか?お願いします。

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

  • ベストアンサー
  • tany180sx
  • ベストアンサー率63% (239/379)
回答No.2

少し構成を変えてこんなのはどうでしょう。 $hosts = array(  'www.google.co.jp' => 'q',  'search.yahoo.co.jp' => 'p', ); $host = $parseUrl['host']; if (isset($hosts[$host])) {  $qname = $hosts[$host];  $keyword = $parseQuery[$qname]; } else {  // unknown } // 変数名は $camelCase と $under_score どちらか統一した方がいいですよ。

nisisippi
質問者

お礼

わかりやすい回答ありがとうございます! たしかに配列にすればソースも短くなりそうですね。 あーなるほど。たしかに紛らわしいですね・・・参考になります。 参考にさせていただいて、自分なりにも改良してみたいと思います!(課題なので) ほんとに助かりました!

その他の回答 (1)

noname#94983
noname#94983
回答No.1

functionに切り替えたのに、case文とbreak文が残っている。これを削除したらどうなる? それから、結果の$keywordは、returnするなりなんなりして関数の呼び出し元に戻さないと意味がないと思うが、そのへんも確認しては。

nisisippi
質問者

お礼

ありがとうございます。たしかにreturnしてませんでしたね・・・ あ、関数とメインのソースは別ファイルなんです^^; わかりにくかったですね、すいませんでした。初歩的な間違いだったようです。 たすかりました!

関連するQ&A