UPDATE:2021年05月31日
PHP の 比較演算子 のすべて【初心者向け】
比較演算子とは
- 比較演算子 は、左右のオペランドを比較する
- 比較演算子 は、結果を論理値「TRUE(真)」「FALSE(偽)」で返す
比較演算子は左辺オペランドと右辺オペランドを比較します(オペランド:演算の対象となる値や変数や式のこと)。比較の結果が真なら論理値の「true(真)」を返し、そうでない場合は論理値の「false(偽)」を返します(論理型 詳しくはこちら)。オペランドには数値や文字列の両方が使用できます。また他のさまざまな型を比較できます。
文字列の自動変換による影響
PHP8 以前のバージョンでは、文字列が数値または数値形式の場合、文字列は比較演算子で比較する前、数値に自動で変換(キャスト)されていました。自動変換の影響によって、数値と文字列から変換された数値との比較の結果が、以下のように誤動作を招くものとして注意されていました。PHP7 と PHP8 の結果の内容をご覧ください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | <?php var_dump(0 == 'a'); var_dump("1" == '01'); var_dump("10" == '1e1'); var_dump(100 == '1e2'); switch('a'){ case 0: echo '0'; break; case 'a': echo 'a'; break; } ?> |
PHP7 の結果は
bool(true)
bool(true)
bool(true)
0
となります。
PHP8 の結果は
bool(true)
bool(true)
bool(true)
a
となります。
比較演算子の種類
比較演算子の種類、優先順位、結合時の評価です。すべての演算子の種類や優先順位はこちらを参照下さい。
演算子 | 名前 | 優先順位 | 結合時の評価 | 例 | 結果 |
---|---|---|---|---|---|
== | 等しい | 1 | 結合しない | $a == $b | 型の相互変換をした後で $a が $b に等しい時に TRUE。 |
=== | 同じ | 1 | 結合しない | $a === $b | $a が $b に等しく同じ型である場合に TRUE |
!= | 等しくない | 1 | 結合しない | $a != $b | 型の相互変換をした後で $a が $b に等しくない場合に TRUE |
<> | 等しくない | 1 | 結合しない | $a <> $b | 型の相互変換をした後で $a が $b に等しくない場合に TRUE |
!== | 同じでない | 1 | 結合しない | $a !== $b | $a が $b と等しくないか、同じ型でない場合に TRUE |
> | より大きい | 2 | 結合しない | $a > $b | $a が $b より大きい時に TRUE |
< | より小さい | 2 | 結合しない | $a < $b | $a が $b より小さい時に TRUE |
>= | 以上 | 2 | 結合しない | $a >= $b | $a が $b より大きいか等しい時に TRUE |
<= | 以下 | 2 | 結合しない | $a <= $b | $a が $b より小さいか等しい時に TRUE |
<=> | 宇宙船 | 2 | 結合しない | $a <=> $b | $a が $b より小さいときに負の値、 $b と等しいときに 0、 $b より大きいときに正の値。(PHP7以降で使用可能) |
殆どの演算子はオペランド(値あるいは式)に対して前提条件があります。例えば、「 + 」や「 – 」など、算術演算子のニ項演算子の場合、2つのオペランドが同じデータ型であることが前提条件になっています。そのためPHPでは前提条件に則るためにデータ型を自動的に変換します。詳しくは「さまざまな型の比較」で説明します。
さまざまな型の比較
- 比較演算子 は、様々なデータ型を比較できる
比較演算子は様々なデータ型を比較でき、左辺オペランドと右辺オペランドに異なるデータ型を配置しても比較することが可能です。その際、注意しなければならないことは、型のジャグリングが発生するということです。型のジャグリングとは規則に応じて自動的に行われるデータ型の変換のことです。PHPは必要に応じてデータ型を自動的に変換します。データ型の変換をキャストといいます。型のジャグリングについてはこちらを参照ください。
以下の表は比較演算子を利用する際、左右のオペランドの型に応じた振る舞いです。
第 1 オペランドの型 | 第 2 オペランドの型 | 結果 |
---|---|---|
null または string | string | NULL を "" に変換し、数値または文字として比較します |
bool または null | あらゆる型 | bool に変換し、FALSE < TRUE と判断します |
object | object | 組み込みクラスには独自の比較基準が定義されています。それ以外の クラスは比較できません。同じクラスであるかどうかは – プロパティが 同じ値であるかどうかを配列形式で比較(PHP 4)、PHP 5 では ここで説明されています。 |
string, resource または number | string, resource または number | 文字列やリソースを数値に変換し、算術演算を行います |
array | array | 要素数の少ない配列のほうが小さくなります。オペランド 1 のキーが オペランド 2 に存在しない場合、配列は比較できません。そうでない場合は 個々の要素の値を比較します |
array | あらゆる型 | array のほうが常に大きくなります |
object | あらゆる型 | object のほうが常に大きくなります |
1 2 3 4 5 6 7 8 9 10 11 12 13 | <!-- サンプルコード --> <?php //NULLを""に変換 if(null == "") echo '結果は TRUE です。<br>'; //""をboolに変換 if(false == "") echo '結果は TRUE です。<br>'; //要素数の少ない配列の方が小さくなる $a = array(1,2,3); $b = array(1,2,3,4); if($a <= $b) echo '結果は TRUE です。<br>'; ?> |
結果は
結果は TRUE です。
結果は TRUE です。
となります。
比較の例
== 等しい
1 2 3 4 | <!-- サンプルコード --> <?php if(1 == 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
== 同じ
1 2 3 4 | <!-- サンプルコード --> <?php if(1 === 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
!= 等しくない
1 2 3 4 | <!-- サンプルコード --> <?php if(1 != 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
!== 同じでない
1 2 3 4 | <!-- サンプルコード --> <?php if(1 !== 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
> より大きい
1 2 3 4 | <!-- サンプルコード --> <?php if(2 > 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
< より小さい
1 2 3 4 | <!-- サンプルコード --> <?php if(1 < 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
>= 以上
1 2 3 4 | <!-- サンプルコード --> <?php if(2 >= 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
<= 以下
1 2 3 4 | <!-- サンプルコード --> <?php if(1 <= 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> |
結果は
となります。
<=> より小さい 等しい より大きい
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | <!-- サンプルコード --> <pre class="lang:php decode:true " ><?php // 整数 echo 1 <=> 1; // 0 echo "<br>\n"; echo 1 <=> 2; // -1 echo "<br>\n"; echo 2 <=> 1; // 1 echo "<br>\n"; // 浮動小数点数 echo 1.5 <=> 1.5; // 0 echo "<br>\n"; echo 1.5 <=> 2.5; // -1 echo "<br>\n"; echo 2.5 <=> 1.5; // 1 echo "<br>\n"; // 文字列 echo "a" <=> "a"; // 0 echo "<br>\n"; echo "a" <=> "b"; // -1 echo "<br>\n"; echo "b" <=> "a"; // 1 echo "<br>\n"; echo "a" <=> "aa"; // -1 echo "<br>\n"; echo "bb" <=> "aa"; // 1 ?> |
結果は
-1
1
0
-1
1
0
-1
1
-1
1
となります。
サンプルコード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 | <!-- サンプルコード --> <h3>型変換</h3> <?php //NULLを""に変換 if(null == "") echo '結果は TRUE です。<br>'; //""をboolに変換 if(false == "") echo '結果は TRUE です。<br>'; //要素数の少ない配列の方が小さくなる $a = array(1,2,3); $b = array(1,2,3,4); if($a <= $b) echo '結果は TRUE です。<br>'; ?> <h3>等しい==</h3> <?php if(1 == 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>同じ===</h3> <?php if(1 === 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>等しくない!=</h3> <?php if(1 != 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>同じでない!==</h3> <?php if(1 !== 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>より大きい></h3> <?php if(2 > 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>より小さい<</h3> <?php if(1 < 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>以上>=</h3> <?php if(2 >= 1) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3>以下<=</h3> <?php if(1 <= 2) echo '結果は TRUE です。'; else '結果は FALSE です。'; ?> <h3><=> より小さい 等しい より大きい</h3> <?php // 整数 echo 1 <=> 1; // 0 echo "<br>\n"; echo 1 <=> 2; // -1 echo "<br>\n"; echo 2 <=> 1; // 1 echo "<br>\n"; // 浮動小数点数 echo 1.5 <=> 1.5; // 0 echo "<br>\n"; echo 1.5 <=> 2.5; // -1 echo "<br>\n"; echo 2.5 <=> 1.5; // 1 echo "<br>\n"; // 文字列 echo "a" <=> "a"; // 0 echo "<br>\n"; echo "a" <=> "b"; // -1 echo "<br>\n"; echo "b" <=> "a"; // 1 echo "<br>\n"; echo "a" <=> "aa"; // -1 echo "<br>\n"; echo "bb" <=> "aa"; // 1 ?> |
結果は TRUE です。
結果は TRUE です。
結果は TRUE です。
== 等しい
結果は TRUE です。
=== 同じ
結果は TRUE です。
!= 等しくない
結果は TRUE です。
!== 同じでない
結果は TRUE です。
> より大きい
結果は TRUE です。
< より小さい
結果は TRUE です。
>= 以上
結果は TRUE です。
<= 以下
結果は TRUE です。
<=> より小さい 等しい より大きい
0
-1
1
0
-1
1
0
-1
1
-1
1
タグ(=記事関連ワード)
日付
最終更新日:2021年05月31日