phpで文章に指定文字列があるかどうかを調べる
その文章の中に指定の文言があるかどうかをphpで調べるには「strpos」を使うのが楽です。
$mystring = 'abc'; $findme = 'a'; $pos = strpos($mystring, $findme); // !== 演算子も使用可能です。ここで != を使っても期待通りに動作しません。 // なぜなら 'a' が 0 番目の文字だからです。(0 != false) を評価すると // false になってしまいます。 if ($pos !== false) { echo "文字列 '$findme' が文字列 '$mystring' の中で見つかりました"; echo " 見つかった位置は $pos です"; }
ただ、!==falseで比較するのも直感的でないし、関数を作りつつ、一つの対象に複数の文字列で検索をかけたい場合もあるので配列を指定しても大丈夫なように設計する。
function is_word_search( $str, $source, $mode ) { if ( $str == "" or $source == "" ) return false; if ( $mode == 0 ) { if ( $str == $source ) return true; } else { if ( strpos( $str, $source ) !== false ) return true; } return false; } function is_word( $str, $source, $mode = 0 ) { if ( $str == "" or $source == "" ) return false; if ( is_array( $source ) ) { foreach ( $source as $val ) { if ( is_word_search( $str, $val, $mode ) ) return true; } return false; } if ( is_word_search( $str, $source, $mode ) ) return true; return false; }
「is_word_search」と「is_word」という2つの関数にしてみた。is_word関数の「$str」に指定文字列、$sourceに検索文言を入れる。配列かどうかを判断し、配列であれば「foreach」で回している。
実際に文章を比較・検索するのは「is_word_search」で、その中で「strpos」によって文字列を判断している。また、「$mode」が0だと単純比較、1だとstrposを使うようにもしているので、中々扱いやすい形になっていると思う。
$str = "こんにちは、私はたぬきです"; $source = [ "こんにちは", "こんばんわ" ]; if ( is_word( $str, $source, 1 ) ) echo "ok"; ↓ OK