PHP

【PHP】strpos()関数とstrstr()関数で文字列検索!

【PHP】strpos()関数とstrstr()関数で文字列検索!

【PHP】strpos()関数とstrstr()関数で文字列検索!

PHPである文字列の中に特定の文字列が含まれているかをチェックする場合には、strpos()関数strstr()関数のどちらを使うことができます。

どちらを使用してもOkですが、私の場合にはstrpos()関数の方を使用します。

理由は、PHPリファレンスに、以下の様な記述がある為です。
注意: もし特定の haystack に needle があるかどうかを調べるだけの場合、 より早く少ないメモリを使用する strpos() を代わりに使用してください。

ちょっとした処理で使用する分には、どちらでも大きな差は出ないと思います。

ですが、例えば、ルーム処理の中で繰り返し使用する場合には、かなり大きな差になる場合もあります。
少しでも処理速度を意識するなら、基本的にはstrpos()関数を使うようにしましょう。

返り値と注意点

因みに、
strpos()関数を使用した時の返り値は
検索対象文字列の中で検索文字が最初に現れる場所」、
strstr()関数を使用した時の返り値は
検索対象文字列の検索文字が最初に現れる場所から検索対象文字列の終わりまで
です。

つまり、
echo strpos(“abcdefg”, “cd”);
echo strstr(“abcdefg”, “cd”);
とすると、それぞれの返り値は「2」、「cdefg」となります。

ここで注意しないといけないのは、
例えば、echo strpos(“abcdefg”, “ab”);だと「0」が返ってきてしまいます。

これって結構まずくて、以下の様なコードを実行するとします。

if(strpos(“abcdefg”, “ab”)){
  echo “abは含まれています”;
}else{
  echo “abは含まれていません”;
}

これだと「0」が返ってきてしまうために、正常に判定が行えません。
その為、「abは含まれていません」と出力されてしまいます。

なので、strpos()関数を使って文字列の検索処理を行う場合には、必ず、以下の様にしましょう。

if(strpos(“abcdefg”, “ab”) !== false){
  echo “abは含まれています”;
}else{
  echo “abは含まれていません”;
}