Caution

お使いのブラウザはJavaScriptが実行できない状態になっております。
当サイトはWebプログラミングの情報サイトの為、
JavaScriptが実行できない環境では正しいコンテンツが提供出来ません。
JavaScriptが実行可能な状態でご閲覧頂くようお願い申し上げます。

  1. トップページ
  2. PHP入門編 - 真偽値(論理値)と比較演算子

真偽値(論理値)と比較演算子

みなさまどうもこんにちわ。

前回は多次元配列について色々とお疲れ様でございました。今回は『真偽値』(論理値)と『比較演算子』についてやっていきたいと思います。『真偽値』は『boolean』(ブーリアン)とも呼ばれますのでこちらも覚えておいてください。参考書とか現場とかでよく使われます。

まずはやたら白黒はっきり決めてくる『真偽値』ってやつから解説をしていきます。『真偽値』は『true』(真)か『false』(偽)かを表す値です。『true』は「トゥルー」、『false』は「フォルス」と読みます。

記述方法はこんな感じです。

<?php
$bl[] = true;
$bl[] = false;

var_dump($bl);

これを実行させるとこうなります。

array(2) {
  [0]=>
  bool(true)
  [1]=>
  bool(false)
}

『var_dump()』ちゃんが『bool』って教えてくれてますね。なのでバッチリ『真偽値』として扱われています。

注意点として『true』とか『false』を『'』とか『"』で囲んではダメです。そうすると文字列の『true』と『false』になってしまうため『真偽値』ではなくなってしまいます。

<?php
$bl[] = 'true'; // 『'』とかで囲うと文字列になっちゃいます。
$bl[] = 'false';

var_dump($bl);

と『真偽値』の記述方法はこれだけです。ここまでは問題ないかと思います。

あとは使い方ですよね。何か処理をさせて正しければ『true』、間違ってれば『false』を表す、それだけな値なわけですが、プログラムにおいてこれがとっても重要なので、めちゃめちゃ使われる頻度が高いです。これについては『比較演算子』と同時に見ていくと分かりやすいのでこのまま『比較演算子』についても解説していきます。

『比較演算子』は数値の大きさを比べたり文字列が同じ文字なのか比べたりして、その結果によって該当する『真偽値』を返す処理を行う演算子のことを指します。

この『比較演算子』は数学で両辺を比較する『<』とか『<=』とか『>』とか『>=』とかありましたよね。あれらがまさに『比較演算子』になります。

ではちょっと試してみましょう。『var_dump()』の中で数値『1』と数値『2』を比べてみます。どっちが大きいか、というと数値『2』の方が大きいので『1 < 2』と記述すれば『true』が返ってくるはずなので実験してみます。

<?php
var_dump(1 < 2);

実行させてみましょう。

bool(true)

『true』が返ってきましたね。では『1 > 2』と記述してみます。

<?php
var_dump(1 > 2);

結果は以下です。

bool(false)

『1 > 2』は間違っているのでちゃんと『false』が返って来ています。基本的な動作はこんな感じですが大丈夫そうでしょうか。

そしてプログラミングでは数学にはない様々な比較ができます。以下は『比較演算子』の一覧です。

==オペランド同士が等しいならば『true』を返します。
===オペランド同士が厳密に等しいならば『true』を返します。
!=オペランド同士が等しくないならば『true』を返します。
!==オペランド同士が厳密に等しくないならば『true』を返します。
>左オペランドが右オペランドより大きいならば『true』を返します。
>=左オペランドが右オペランドより大きいまたは等しいならば『true』を返します。
<左オペランドが右オペランドより小さいならば『true』を返します。
<=左オペランドが右オペランドより小さいまたは等しいならば『true』を返します。

さて、ここで『オペランド』という言葉がでてきました。前の記事でもちょろりと解説しましたが、再度確認しておきましょう。

『オペランド』とは演算の対象となる値や変数のこと全般を指す言葉です。別名では『被演算子』とも呼ばれますね。日本語のほうがイメージしやすいかもしれません。例えば『1 < 2』であるならば『1』と『2』が『オペランド』になります。

ではひとつひとつみていきましょう。まず両方が等しいかどうかを判断する『===』についてです。『1 === 1』と記述すると『1』と『1』は等しいのでこれは『true』となります。これは特に難しくないかと思います。文字列なども比較できます。『"hoge" === "hoge"』とすれば両方、文字列の『hoge』となりますので『true』となります。

続いては等しくない、という演算を行う『!==』です。『1 !== 2』と記述すると『オペランド』同士が等しくないので『true』となります。『1 !== 1』と記述すると『1』と『1』は等しいので『false』となります。こちらも文字列同士を比較できます。『"hoge" != "hoge"』は両方、文字列の『hoge』なので『false』となります。

PHP以外の他の言語において両方が等しいかどうかを判断する記号は一般的に『==』となります。『=』が2つですね。等しくない、という場合には『!=』を使用します。

PHPでも『==』と『!=』を使用することができますがちょっと問題があり、『==』や『!=』を使用すると『型の変換』がプログラマーの見えないところで自動で行われてしまいます。

型の変換とは『文字列』としての『1』が勝手に『数値』に変換されたりして比較されてしまうということです。以下は文字列としての『1』と数値としての『1』を比べた場合です。

<?php
var_dump('1' == 1); // これは『true』となってしまう。

基本的にプログラミングにおいては『厳格な比較』を行って結果を得たいと考えます。プログラミングは厳格な演算が行われるという事実を元に構築していくからですね。ですのでPHPにおいてオペランドが等しいかどうかを比較させる場合は『===』か『!==』を使用するのが一般的です。ちなみにJavaScriptでも『===』か『!==』を使用するのが推薦されていたりします。

ただし、データベースや他の処理言語から値を受け取ったりする場合に数値や真偽値が文字列になってしまったりする場合があります。その場合は『==』や『!=』を使ってしまって問題ありませんので状況によって使い分けるようにしましょう。

次は『>』と『>=』です。これは算数とか数学の時に勉強した『小なりイコール』ってやつですね。左のオペランドと比べて右のオペランドが小さいか、もしくは同じならば『true』となります。

  • 『2 > 1』 → 『true』
  • 『1 > 1』 → 『false』
  • 『0 > 1』 → 『false』
  • 『1 >= 1』 → 『true』

『<』と『<=』についても逆になっただけですので問題ないかと思います。

あとPHPでは文字列同士を辞書順で比較ができたりします。検索エンジン的な処理を構築する場合でよく使用されますので覚えておくと良いです。

以下が『比較演算子』のオペランドの形式ごとの挙動一覧です。

第1オペランド第2オペランド比較方式
数値数値数値による比較
文字列の数値文字列の数値数値による比較
文字列の数値数値数値による比較
通常の文字列数値数値による比較
文字列の数値通常の文字列辞書順による比較
通常の文字列通常の文字列辞書順による比較

上記の注意点がいくつかあり、まずPHPでは文字列の数値同士で比較すると数値としての比較になる、という不思議な挙動があります。辞書順ではありませんのでご注意を。

<?php
var_dump('2' < '1'); // これは『2 < 1』として処理されます。

続いて通常の文字列と数値を比較すると数値による比較になる、というところがあります。以下のサンプルをご覧ください。

<?php
var_dump('1time' < 2); // これは『true』として処理されます。

文字列『1time』と数値『2』を『<』で比べてなぜか『true』が返ってくるというなんとも不思議な演算がされていますね。これは『文字列の最初が数値ならばそれを抜き出し、数値が含まれていなかったら0にする』という演算が裏側でされているせいだったりします。文字列『1time』だったら数値『1』になる、という感じですね。

こんな感じでPHPの『比較演算子』はちょっと不思議な演算をすることが多いので文字列と数値を比較する、という処理は避けたほうが無難かもしれません。

あと辞書順、というのがありますがこれはその名の通り辞書の目次順の並びで処理を行うということになっています。しかし、コンピューターでの日本語の辞書順処理は思うような結果にならないことが多く、日本語での辞書順処理は使用しないほうが無難かもしれません。

そして全ての『比較演算子』で、変数などを使用することができます。

<?php
$op1 = 1;
$op2 = 2;

var_dump($op1 < $op2); // 『true』が出力されます。

このようにちゃんと変数の中身を展開したうえで比較できますのでこれも覚えておきましょう。

というわけで『真偽値』と『比較演算子』については以上となります。『真偽値』と『比較演算子』はどういうときに使うんだろう、と考えた方いらっしゃると思いますので次の記事では『if文』について解説していきたいと思います。こちらで使い方を確認していきましょう。

ではではこの辺で。失礼致します。

この記事は桜舞が執筆致しました。

著者が愛する小型哺乳類

桜舞 春人 Sakurama Haruto

ISDN時代から様々なコンテンツを制作しているちょっと髪の毛が心配な東京在住のプログラマー。生粋のロングスリーパーで、10時間以上睡眠を取らないと基本的に体調が悪い。好きなだけ寝れる生活を送るのが夢。ゲームとスポーツと音楽が大好き。誰か髪の毛を分けて下さい。

記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。