表題がややこしくてすみません。
たとえば、$_SERVER[‘HTTP_USER_AGENT’]で取得できるユーザエージェントに、配列で渡す文字列が一つでも含まれていればtrue,そうでなければfalseを返す関数を作るとしたら、どうするのが効率的でしょうか?
// クローラーかどうかを判定する関数 function is_clawler($ua = null) { if (empty($ua)) { $ua = $_SERVER['HTTP_USER_AGENT']; } $crawlers = array( "Googlebot", // google "Baiduspider", // Baidu "Hatena", // Hatena "Yahoo", // Yahoo "FreeNutch", // FreeNutch ); foreach ($crawlers as $keyword) { if (stripos($ua, $keyword) !== false) { return true; } } return false; }
こんな感じの処理を書いたんですが、どうも美しくありませんよね?
正規表現をつかって書くと
// クローラーかどうかを判定する関数 function is_clawler($ua = null) { if (empty($ua)) { $ua = $_SERVER['HTTP_USER_AGENT']; } $crawlers = array( "Googlebot", // google "Baiduspider", // Baidu "Hatena", // Hatena "Yahoo", // Yahoo "FreeNutch", // FreeNutch ); $ua = env("HTTP_USER_AGENT"); $crawlers = implode("|", $crawlers); return ereg($crawlers, $ua); }
こんな風にも書けますが、ベンチマークを取ってみると正規表現のほうが遅いようです。
もっとシンプルで、効率のいい方法があるよ!って方はぜひ教えてくださいね。