PHPで特定の文字列を含むか確認する方法をご紹介します。
PHP7以下のバージョンでは、strpos()関数を使用します。
strpos()関数は指定した文字列が最初に現れる場所を見つけてくれます。
文字列内の部分文字列が最初に現れる場所を見つける
引用元:PHP公式サイト
strposは該当する文字列が見つからなかった場合にはfalseを返してくれます。この性質を利用して検索を行います。
指定した文字列が含まれない場合には以下のように「=== false」で判定し、
1 2 3 4 5 |
$kamotora = "kamotora"; if(strpos($subject,'hoge') === false){ //$kamotoraのなかに「hoge」が含まれていないので、この中の処理が実行される echo "「hoge」は含まれていません"; } |
逆に含まれている場合に処理を行いたい場合には「!== false」を使用して判定を行います。
1 2 3 4 5 |
$kamotora = "kamotora"; if(strpos($kamotora,'kamo') !== false){ //$kamotoraのなかに「kamo」が含まれているので、この中の処理が実行される echo "「kamo」が含まれています"; } |
phpにはstrposと同じように検索を行うstrstr()関数があります。
こちらのサイトに記載があるとおり、文字列検索を行うだけであればstrpos()を使用することが推奨されています。
もし特定の haystack に needle があるかどうかを調べるだけの場合、 より高速でメモリ消費も少ない strpos() を代わりに使用してください。
引用元:PHP公式サイト
また、PHP8.0からはstr_contains()関数が用意されています。公式サイトの説明通り「指定された部分文字列が、文字列に含まれるかを調べる」関数です。
str_contains — 指定された部分文字列が、文字列に含まれるかを調べる
引用元:PHP公式サイト
元々、strposやstrstrは検索用途ではありません。
strposについては、上で説明した通り、falseの判定に「!==」や「===」を用いていますが、これを「!=」や「==」を用いた場合には誤った判断をされる可能性があります。
しっかりとした知識が必要になるので、利用する際には注意が必要です。
その点、str_contains()は検索に特化しているので、PHP8.0以降で検索を行う際にはstr_contains()を使用することをオススメします。