PHP入門 ≫ LESSON7 比較演算子

判定とは?

数値や文字列は比較することができます。
二つの関係を比較するのに演算子を使います。

関係演算子
数値や文字列の関係は、真(true)または偽(false)として判定されます。
真の場合は1を返し、偽の場合は何も返しません。

比較演算子
数値や文字列を比較した結果は、大きい(1)等しい(0)小さい(-1)として判定されます。

数値

数値を比較する演算子には次のようなものがあります

数値の関係・比較演算子
a < ba < bなら真・それ以外は偽
(aはbよりも小さい)
a > ba > bなら真・それ以外は偽
(aはbよりも大きい)
a <= ba <= bなら真・それ以外は偽
(aはb以下)
a >= ba >= bなら真・それ以外は偽
(aはb以上)
a == ba == bなら真・それ以外は偽
(aとbは等しい)
a === baとb同じ型で、a == bなら真・それ以外は偽
(aとbは等しい)
a != ba != bなら真・それ以外は偽
(aとbは等しくない)
a >< ba != bなら真・それ以外は偽
(aとbは等しくない)
a !== ba != bかaとbが同じ型でないなら真・それ以外は偽
(aとbは等しくない)
a <=> ba > bなら1,a == bなら0,a < bなら-1(PHP7以降)

最後の一つが比較演算子、あとは関係演算子です。

$kekka = 6 < 12;
echo "6 < 12 : $kekka\n";
$kekka = 6 > 12;
echo "6 > 12 : $kekka\n";

$kekka = 10 <= 9;
echo "10 <= 9 : $kekka\n";
$kekka = 10 >= 10;
echo "10 >= 10 : $kekka\n";

$kekka = 6 == 6;
echo "6 == 6 : $kekka\n";
$kekka = 6 != 7;
echo "6 != 7 : $kekka\n";
$kekka = 6 <=> 12;
echo "6 <=> 12 : $kekka\n";

結果は以下。

6 < 12 : 1
6 > 12 :
10 <= 9 :
10 >= 10 : 1
6 == 6 : 1
6 != 7 : 1
6 <=> 12 : -1

数値を変えて色々試してみて下さい。

「===」や「!==」のように、型が一致する、しないとはどういう意味でしょうか? やってみましょう。

$kekka = 6 == '6';
echo "6 == '6' : $kekka\n";
$kekka = 6 === '6';
echo "6 === '6' : $kekka\n";

結果は以下。

6 == '6' : 1
6 === '6' :

数値6と文字'6'は「==」だと同じと判断されるが、「===」だと型が違うので偽ということになります。
「!==」は、「===」の否定形です。型と値が一致した場合のみ偽となります。

文字列

文字列の比較も、基本的に数値の演算子と同じです。
一致するしないは、「==」や「!=」、「===」を使います。

大きい、小さいの比較は演算子ではなくstrcmp関数を使います。(後に説明)
ちなみに文字列の大きい・小さいは、辞書順に並べた時に先に来る方が小さいと考えます。

$kekka = abc" == "abc";
echo '"abc" == "abc" : ' . $kekka . "\n";
$kekka = "1abc" == 1;
echo '"1abc" == 1; : ' . $kekka . "\n";
$kekka = "1abc" === 1;
echo '"1abc" === 1; : ' . $kekka . "\n";

結果は以下。

"abc" == "abc" : 1
"1abc" == 1; : 1
"1abc" === 1; :

「==」は勝手に型変換を行ってしまうので、"1abc"は勝手に1とされてしまうので、結果は真になります。
正確に行うには「===」を使うか、strcmp関数を使いましょう。

否定

判定結果を反転させることができます。!を前に付けると「~ではない」という否定の意味になります。 よって、

$kekka = 1 < 2;
echo "1 < 2 : $kekka\n";

$kekka = !(1 < 2);
echo "!(1 < 2) : $kekka\n";

結果は以下。

1 < 2 : 1
!(1 < 2) :

結果が真の場合は偽に、偽の場合は真に。
1の場合は偽に、0または-1の場合は真になります。

論理型

PHPのデータ型に、論理型というものがあります。
これは、TRUEかFALSE、どちらかの値が入る特殊な型です。

他の型から論理型にデータを変換するときは、基本的に1など何か値のあるものはTRUE、0やNULL(値がセットされていない変数中身)はFALSEとされます。

$kekka = TRUE;
echo "$kekka\n";
var_dump($kekka);

$kekka = FALSE;
echo "$kekka\n";
var_dump($kekka);

結果は以下。

1
bool(true)

bool(false)

値は、var_dumpを使うと型と値がはっきりと出力されます。
boolは論理型を指します。ちなみに、true、falseと小文字でもかまいません。

ページのトップへ戻る