【PHP】文字列の一致や、文字列を含むかどうかを判定

PHP
この記事は2010年に書いたものを書き直しました!

こんにちは。とみっちです。

PHPで検索対象の文字列に、特定の文字列が含まれるかどうかなどをチェックするための書き方を紹介するよ!

「strstr」と「stristr」

PHPマニュアルを確認。こっちは「strstr

そして、こっちは「stristr

書き方はこうだよ。

strstr( A, B )
stristr( A, B )
文字列Aにおいて文字列Bが最初に見つかった位置から最後までの文字列を返す。

strstr()は文字列の大文字小文字を区別し、stristr()は文字列の大文字小文字を区別しない。

↑パッと見分かりづらいんだけど、関数名に「i」が入っているのと入っていないのとで、挙動が違ってくるので注意!

<?php
 $url = 'http://example.com/shop/item/3';

 if (strstr($url, '/shop/item')) {
  echo "URLに「/shop/item」が含まれています。";
 } else {
  echo "URLに「/shop/item」が含まれていません。";
 }

 echo "<br>";

 var_dump(strstr($url, '/shop/item'));

$urlは適当なサンプル。

$_SERVER["REQUEST_URI"]

でドメイン名以降のURL文字列を取得することが可能だよ。

「strstr」関数のサンプル実行結果

URLに「/shop/item」が含まれています。
string(12) "/shop/item/3"

この関数は、見つかった文字列部分Bから最後までを結果として返すので、

echo strstr($url, '/shop/item');

とすると、「/shop/item/3」が表示される。

「/shop/item」だけではなく、一致した文字列以降が返却されることに注意しようね。

「strpos」

strpos( A, B )
文字列Aの中で、Bが最初に現れる位置を探す。
<?php
  $url = 'http://example.com/shop/item/3';

  if (strpos($url, '/shop/item') !== false) {
    echo "URLに「/shop/item」が含まれています。";
  } else {
    echo "URLに「/shop/item」が含まれていません。";
  }
  echo "<br>";

  $str = '進撃の巨人';

  var_dump(strpos($str, '進撃'));
  echo "<br>";

  if(strpos($str, '進撃') !== false) {
    echo '駆逐してやる!';
  }

「strpos」関数のサンプル実行結果

URLに「/shop/item」が含まれています。
int(0)
駆逐してやる!

strposは該当する文字列が見つからなかった場合にfalseを返すけど、先頭に該当する文字列があった場合に0を返すので注意。

型までチェックする必要があるため、判定には「=== false」もしくは「!== false」を使おう。

先頭一致の場合に判定できないから、trueでの判定は使わないようにね。

「preg_match」

preg_match( A, B )

文字列Bから正規表現パターンAにより、文字列のマッチングを行う。

<?php
  $string = "PHPは便利だ!";

  if (preg_match("/PHP/", $string)) {
      echo "「PHP」が含まれています。";
  } else {
      echo "「PHP」が含まれていません。";
  }

「preg_match」関数のサンプル実行結果1

「PHP」が含まれています。

preg_match関数だと正規表現が使えるので、例えば特定の文字列から始まるかどうかといった確認も「^」といった記号を使うことで可能だよ。

<?php
  $string = "PHPをそんなにディスらないで。";

  if (preg_match("/^PHP/", $string)) {
    echo "検索文字列の先頭は「PHP」です。";
  } else {
    echo "検索文字列の先頭は「PHP」ではありません。";
  }

「preg_match」関数のサンプル実行結果2

検索文字列の先頭は「PHP」です。

※正規表現パターンAを「/^[0-9]+$/」とすれば文字列Bが全て半角数字かどうか調べるといった使い方も可能。

正規表現が使えると便利!

特定の文字列が他の文字列内に含まれているかどうかを調べるためだけに「preg_match」関数を使うのは避けたいところ。「strpos」関数、次いで「strstr」関数を使うほうが速い。

注意事項

preg_match関数は上記の「strstr/stristr」、「strpos」関数よりも低速でメモリ消費が多いよ。

実行速度が速い順に、

strpos、strstr/stristr、preg_match

となる。

できるだけ高速に処理を行いたい場合は「strpos」関数がオススメ
 

以上、「PHPで文字列の一致や、文字列を含むかどうかを判定」する方法でした!

プロから直接学べるプログラミングスクールの紹介!PHPコースあり!

自己流でプログラミングを覚えようとすると、環境設定でつまづく、書いたプログラムがなぜ動かないか解決できず、多大な時間を浪費してしまいがちです。

担当の指導者(メンター)が付いてくれるTechAcademyなら、分からないことをどんどん質問して解決できます!コードレビューしてもらえるのも素晴らしい点ですね。

【TechAcademy】家で学べるプログラミングスクール

Web制作会社が立ち上げたWebデザイナー育成スクール Web塾超現場主義

Web制作に実際に携わっている講師陣が、現場で通用するスキルを伝授します!卒業後は転職支援、仕事紹介などを行っており、フリーランス独立する道を探すこともできそうです。

また「独立・開業はちょっと...」という方へは、当社の制作案件をお手伝いして頂く道も開けます。
Facebookアカウントでコメント

※本コメント機能はFacebookによって提供されており、この機能によって生じた損害に対してザ サイベースは一切の責任を負いません。

PHP

ABOUTこの記事を書いた人

とみっち

埼玉でザ サイベースを主催しています。Webクリエイター。フリーランス歴7年。飄々と生きています。これでも育児頑張ってます。長野市出身。 @tomicci 詳しいプロフィール【興味】ギター/DTM/Web/車/田舎/旅/酒/育児 自然の音からデスメタルまで聴きます。【運営サイト】 ザ サイベース おと風景