PHPの比較演算子の違いと使い方

19/05/12 23:13:56     19/06/02 13:19:39

PHPの比較演算子の違いと使い方

PHPに限らずプログラミングの基本的な概念の一つに、比較演算子があります。

特にif文の条件判定に使用することが多いでしょう。

そこでこのページでは、PHPの基本的な比較演算子の使い方と、他のプログラミング言語にはないちょっとした違いなどについて紹介していきます。

PHPの比較演算子一覧

まず最初にPHPの比較演算子を一覧で紹介します。

それぞれ、

演算子
実際の使い方
比較演算子の意味

という三段落で紹介しています。

==
a == b
bとaの値が等しい

===
a === b
bとaの値が等しく型も等しい

!=
a != b
bとaの値が等しくない

<>
a <> b
bとaの値が等しくない

!==
a !== b
bとaの値または型が等しくない

>
a > b
bよりaが大きい

>=
a >= b
bよりaが大きいか等しい

<
a < b
bよりaが小さい

<=
a <= b
bよりaが小さいか等しい

比較演算子とはその名の通り、左右の項目を比較するためのものです。

また条件の判定で使ったり結果を変数に格納する、出力するといった場合、比較結果が真ならtrueを、偽ならfalseを返す仕様になっています。

他のプログラミング言語にはあまりないPHPならではの仕様と言えば、「===」でしょう。型の比較まで行う言語は少数派かもしれません。型が異なると単純に比較できない言語が多いので、PHPは型に対して臨機応変な言語と言えます。

比較演算子の実例

それでは上で紹介した比較演算子を使って、実際に簡単なプログラムを作成していきます。まず最初に左辺と右辺が等しいかどうかを判定します。

$num = 10;

if ($num == 10){
    print "比較結果はtrueです。";
}

まず10の入った変数を用意して、if文の中の==で10と比較します。比較結果はtrueなので、「比較結果はtrueです。」と出力されます。PHPの仕様では、文字列の型に臨機応変になっているため、型が違っても比較することが可能です。

バグの原因にもなるので賛否両論あるかと思いますが、型が違っていることを理解したうえで使用するのであれば利便性は高いです。他の言語だと一回キャストしたり型を変えて戻すようなコードが発生するかもしれませんが、PHPの場合その手間が省けます。より実践的なコードを紹介すると、以下のようになります。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8" />
<title>PHPテスト</title>
</head>
<body>

<p>PHPのテストです。</p>
<p>
<?php
$var1 = 10;
if ($var1 == 10){
    print "比較結果はtrueです。<br />";
}
$var1 = 11;
$var2 = '11';
if ($var1 == $var2){
    print "11 == '11'はtrueです。<br />";
}
$var1 = 'Tokyo';
if ($var1 == 'Tokyo'){
    print "変数の値はTokyoです。";
}
?>
</p>
</body>
</html>

これを実行すると、以下のようになります。

PHPのテストです。

比較結果はtrueです。
11 == ’11’はtrueです。
変数の値はTokyoです。

また値と型の両方が等しいかどうかを判定するコードは以下のようになります。

$num = 10;

if ($num === 10){
    print "変数numの値は 10 と等しい";
}

この場合trueなので「変数numの値は 10 と等しい」と出力されます。次に数値を文字列にして比較してみます。

$num = 10;

if ($num === "10"){
    print "変数numの値は 10 と等しい";
}

これだとfalseになるので、出力処理は行われません。型の比較は行わずに==で比較すればtrueになりますが、===で型も含めて比較すると型が違うのでfalseになります。

大小比較

==や===を使った比較を見てきましたが、大小比較もできます。使用する比較演算子は「<」「<=」「>」「>=」です。サンプルコードを見ていきましょう。

$num = 20;

if ($num > 10){
    print "変数numの値は 10 よりも大きい";
}

if ($num <= 30){
    print "変数numの値は 30以下である";
}

この場合どちらもtrueなので、「変数numの値は 10 よりも大きい」「変数numの値は 30以下である」と出力されます。大小比較の比較演算子については、おそらく算数の基礎的なレベルなので解説するまでもないかと思います。

どの演算子も算数で使うときとまったく同じ使い方です。

while文を使用した比較演算子

if文の中の条件判定で比較演算子を使う方法を紹介しましたが、同じようにwhile文でも使用できます。ただしwhile文の場合ループなので、ループが回るごとに変数の中身が変わっていきます。

あるタイミングで条件式がfalseになるので、そこでループが終了します。それではサンプルコードを紹介します。

<?php
$i = 1;
while($i <= 10){
    echo $i.'<br/>';
    $i++;
}
?>

このコードを実行すると、以下のように出力されます。

1
2
3
4
5
6
7
8
9
10

ループが回るごとに変数の中身を出力していますが、一週ごとに変数が1ずつ加算されていきます。結果的に11になったら条件を満たさないため、出力処理を行わずにプログラムが終了します。

また、以下のように最初から条件を満たさない場合は一回もループが回らずに終了します。

<?php
$i = 1;
while($i < 1){
    echo $i.'<br/>';
    $i++;
}
echo '一度も実行されない。';
?>

この場合「一度も実行されない。」と出力されて処理が終了されます。while文お中には入りません。次に比較演算子というよりはwhileの応用的な使い方になるのですが、入れ子構造にすることもできます。

<?php
$i = 1;
while($i <= 10){
    echo $i;

    $j = 1;
    echo '(';
    while($j <= 3){
    echo $i.'-'.$j.',';
    $j++;
    }
    echo ')';

    echo '<br/>';
    $i++;
}
?>

これを実行すると以下のようになります。

1(1-1,1-2,1-3,)
2(2-1,2-2,2-3,)
3(3-1,3-2,3-3,)
4(4-1,4-2,4-3,)
5(5-1,5-2,5-3,)
6(6-1,6-2,6-3,)
7(7-1,7-2,7-3,)
8(8-1,8-2,8-3,)
9(9-1,9-2,9-3,)
10(10-1,10-2,10-3,)

比較演算子を始めて学習する段階ではここまでやる必要はないのですが、いずれこのような形で比較演算子を使うことになるでしょう。

またwhile同様に、for文でループを回す際にも似たような形で比較演算子を使います。

人気記事

編集部おすすめ記事

この記事を読んだ人はこんな記事を読んでいます

案件探しやフリーランスになるための相談する