column

ITコラム

mv15900

プログラミングノウハウ

2019.05.07

PHP【文字列】文字列の比較

PHP で文字列を比較すると、見た目が違う 2 つの文字列が等しいと判定されるなど、意図する結果が得られない場合があります。
今回は PHP で文字列を比較する方法を紹介します。
 
本サイトでは XAMPP( ザンプ )という開発環境を使用しています。
XAMPP のインストール方法や起動方法については以下の記事をご参照下さい。
PHP【 開発環境 】XAMPP インストール
PHP【 開発環境 】XAMPP の使い方

なお、未経験からITエンジニアへの就職に興味がある方や未経験からプログラミングを効率よく学びたいと考えている方は、就職率98.3%で受講料無料のプログラミングスクールプログラマカレッジもおすすめです。

最終更新日:2019年5月7日


 

1. 比較演算子で文字列を比較

PHP で手軽に文字列を比較できるのは、比較演算子を使用する方法です。

比較対象の 2 つの文字列をイコール記号を使って次のように記述します。

文字列 1 == 文字列 2

文字列 1 === 文字列 2

「 == 」を使用すると 異なるデータ型間でも自動的にデータ型を揃えて値の比較が行われ、「 === 」を使用すると データ型を含めて比較が行われます。

文字列型の「 1 」と数値型の「 1 」を比較する場合、「 == 」を使用すると判定は true となり、「 === 」を使用すると判定は false となります。

比較演算子 のサンプル

比較演算子を使用して 文字列を比較してみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<pre>
<?php

  var_dump("1" == 1);
  var_dump("1" === 1);
  var_dump(1 == "1cm");
  var_dump(1 === "1cm");

?>
</pre>

PHP 文字列 文字列の比較 プログラマカレッジ

「 “1” == 1 」が true で「 “1” === 1 」が false となるのは想定できますが、「 1 == “1cm” 」が true と判定されるのは意外な結果ではないでしょうか。

このように、数字を含む文字列を「 == 」で比較すると、意図した結果が得られない場合があります。
文字列内に数字が入ることはよくあることなので、比較演算子で文字列を比較する場合は「 == 」ではなく「 === 」を使用した方が安全です。

var_dump 関数についてはvar_dumpをご参照下さい。

また、<pre> ~ </pre> はデータを改行して出力するために記述しています。

▲目次へ戻る

 

2. strcmp で文字列を比較

strcmp 関数を使用して 文字列を比較することもできます。

strcmp 関数を実行すると、比較対象の文字列が等しければ 0 が、先に指定した文字列のサイズの方が大きい場合は 1 が、先に指定した文字列のサイズの方が小さい場合は -1 が 返ります。
戻り値が true / false ではない点に注意が必要です。

strcmp 関数は 次のように記述して使用します。

strcmp(文字列1, 文字列2);

strcmp のサンプル

strcmp 関数を使用して 文字列を比較してみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<?php

  echo strcmp("PHP", "PHP");
  echo "<br><br>";

  echo strcmp("php", "PHP");
  echo "<br><br>";

  echo strcmp("PHP", "ピーエイチピー");

?>

PHP 文字列 文字列の比較 プログラマカレッジ

「 echo 」は、データを出力するために使用する PHP の命令です。

strcmp 関数の引数で指定した 2 つの文字列が等しい場合は 0 が、等しくない場合は文字列のサイズを比較して 1 又は -1 が返っています。

上のサンプルでは「 strcmp(“PHP”, “PHP”) 」のように 比較する文字列を引数に直接指定していますが、通常は「 strcmp($str1, $str2) 」のように文字列変数を指定することが多いです。

システム内で文字列の比較をする場面では、文字列が等しいかどうかを判定して後続処理を分岐させるという流れになるのが一般的なので サイズの比較をすることはあまりないと思いますが、戻り値が true / false ではない点が要注意です。

▲目次へ戻る

 

3. strcasecmp で文字列を比較

文字列を比較する関数として、strcasecmp 関数もあります。

比較演算子や strcmp 関数がアルファベットの大文字と小文字とを区別して比較するのに対して、strcasecmp 関数は大文字と小文字とを区別せずに比較します。

strcasecmp 関数を実行すると、比較対象の文字列が等しければ 0 が、先に指定した文字列のサイズの方が大きい場合は 1 が、先に指定した文字列のサイズの方が小さい場合は -1 が 返ります。
戻り値が true / false ではない点に注意が必要です。

strcasecmp 関数は 次のように記述して使用します。

strcasecmp(文字列1, 文字列2);

strcasecmp のサンプル

strcasecmp 関数を使用して 文字列を比較してみます。

下記のようなソースファイルを作成して ブラウザからアクセスすると、次のような表示になります。
( ソースファイルの作成方法についてはソースファイルを作成を、サーバの起動方法等についてはサーバを起動を、それぞれご参照下さい。)

<pre>
<?php

  $str1 = "PHP_プログラマカレッジ";
  $str2 = "php_プログラマカレッジ";

  var_dump($str1 === $str2);
  var_dump(strcmp($str1, $str2));
  var_dump(strcasecmp($str1, $str2));

?>
</pre>

PHP 文字列 文字列の比較 プログラマカレッジ

比較演算子及び strcmp 関数で文字列を比較すると「 PHP 」と「 php 」とは異なる文字列として判定されるのに対して、strcasecmp 関数を使用した場合は「 PHP 」と「 php 」とが等しい文字列として判定されます。

var_dump 関数についてはvar_dumpをご参照下さい。

また、<pre> ~ </pre> はデータを改行して出力するために記述しています。

▲目次へ戻る

無料説明会

SHARE

最新記事

無料説明会に参加してみる

INTERNOUS,inc. All rights reserved.

無料オンライン説明会へ