2つ以上の条件の組み合わせ
記事「【PHPプログラミング入門講座】条件分岐 (if文)」で、「もし[条件A]ならば〜を実行する」という記述は、if文を使って次のように書きました。
if(条件A) { 実行する処理の内容 }
それでは、条件を2つにして「もし[条件A]かつ[条件B]ならば〜を実行する」のように2つの条件を満たす必要がある場合は、どのように書けば良いでしょうか?
今まで説明した内容を使って書くと、次のように書けます。
if(条件A) { if(条件B) { 実行する処理の内容 } }
if文を入れ子構造で使用する連続技です(笑)
これは、これで正しいプログラムの書き方です。
それでは、「もし[条件A]または[条件B]ならば〜を実行する」の場合は、どのように書けば良いでしょうか?
・・・・・・。
今まで説明した内容の範囲では書けませんよね?(笑)
PHPには、この「条件A かつ 条件B」や「条件A または 条件B」を記述するための演算子があります。
今回は、そのような演算子について説明します。
条件A かつ 条件B
「条件A かつ 条件B」は、PHPプログラムでは演算子「&&」(アンド2つ)を使って次のように書きます。
<構文>
if(条件A && 条件B) { 条件を満たしたときの処理 }
この演算子「&&」のことを「論理演算子」と呼びます。
条件Aと条件Bの結果(true / false)に対して「条件A && 条件B」の結果がどのようになるか(true / false)を以下の表にまとめました。
式 | 条件A | 条件B | 式の結果 |
---|---|---|---|
条件A && 条件B | true | true | true |
true | false | false | |
false | true | false | |
false | false | false |
「条件A」と「条件B」のいずれもがtrueの場合だけ「条件A && 条件B」がtrueになり、その他の場合は全てfalseになります。
論理演算子「&&」を使ったサンプルプログラム
論理演算子「&&」を使ったサンプルプログラムを以下に書きます。
サンプルプログラム1
<?php $result1 = true; $result2 = false; if($result1 && $result2) { echo '「$result1 && $result2」の結果は true です。'; } else { echo '「$result1 && $result2」の結果は true ではありません。'; }
<実行結果>
「$result1 && $result2」の結果は true ではありません。
<解説>
これは、構文に当てはめると$result1 が「条件A」で、$result2 が「条件B」になります。
変数$result1の値がtrueで、変数$result2がfalseであり、「$result1 && $result2」はfalseになるため、elseブロックの「echo '「$result1 && $result2」の結果は true ではありません。';」の処理が実行されます。
サンプルプログラム2
<?php $num = 50; if($num >= 10 && $num < 100) { echo $num . 'は10以上100未満です。'; } else { echo $num . 'は10以上100未満ではありません。'; }
<実行結果>
50は10以上100未満です。
<解説>
まず、このif文の条件($num >= 10 && $num < 100)ですが、
PHPには、比較演算子「<」「>」「<=」「>=」は、論理演算子「&&」よりも優先して処理される
という演算子の優先順位のルールが適用されます。
それを踏まえて、構文に当てはめると、「$num >= 10」が「条件A」で、「$num < 100」が「条件B」になります。
変数$numの値が50なので、「$num >= 10」の結果はtrue、「$num < 100」の結果もtrueとなるため、「$num >= 10 && $num < 100」の結果はtrueになり、ifブロックの「echo $num . 'は10以上100未満です。';」の処理が実行されます。
なお、演算子の優先順位が分かりやすいように ( ) を使って
if($num >= 10 && $num < 100) {
の部分を
if(($num >= 10) && ($num < 100)) {
のように記述しても問題ありません。同じ処理が行われます。
条件A または 条件B
「条件A または 条件B」は、PHPプログラムでは演算子「||」(縦棒2本)を使って次のように書きます。
<構文>
if(条件A || 条件B) { 条件を満たしたときの処理 }
この演算子「||」も「論理演算子」です。
条件Aと条件Bの結果(true / false)に対して「条件A || 条件B」の結果がどのようになるか(true / false)を以下の表にまとめました。
式 | 条件A | 条件B | 式の結果 |
---|---|---|---|
条件A || 条件B | true | true | true |
true | false | true | |
false | true | true | |
false | false | false |
「条件A」と「条件B」のいずれかがtrueの場合に「条件A || 条件B」がtrueになり、両方ともfalseの場合はfalseになります。
論理演算子「||」を使ったサンプルプログラム
論理演算子「||」を使ったサンプルプログラムを以下に書きます。
サンプルプログラム1
<?php $result1 = true; $result2 = false; if($result1 || $result2) { echo '「$result1 || $result2」の結果は true です。'; } else { echo '「$result1 || $result2」の結果は true ではありません。'; }
<実行結果>
「$result1 || $result2」の結果は true です。
<解説>
これは構文に当てはめると、$result1 が「条件A」で、$result2 が「条件B」になります。
変数$result1の値がtrueで、変数$result2がfalseであるため、「$result1 || $result2」はtrueになり、ifブロックの「echo '「$result1 || $result2」の結果は true です。';」の処理が実行されます。
サンプルプログラム2
<?php $num = 50; if($num <= 10 || $num >= 100) { echo $num . 'は10以下または100以上です。'; } else { echo $num . 'は10以下または100以上ではありません。'; }
<実行結果>
50は10以下または100以上ではありません。
<解説>
これは、構文に当てはめると、「$num <= 10」が「条件A」で、「$num >= 100」が「条件B」になります。
変数$numの値が50であり、「$num <= 10」の結果はfalse、「$num >= 100」の結果もfalseとなるため、「$num <= 10 || $num >= 100」の結果はfalseになり、elseブロックの「echo $num . 'は10以下または100以上ではありません。';」の処理が実行されます。
演算子の優先順位が分かりやすいように ( ) を使って、ifの条件の記述を
if(($num <= 10) || ($num >= 100)) {
のように記述しても問題ありません。同じ処理が行われます。
否定(〜ではない)(NOT)
「指定した条件ではない」場合をif文の条件にすることもできます。
その場合は、条件の前に「 ! 」(エクスクラメーションマーク、いわゆるビックリマーク)を付与して、次のように書きます。
if(!条件A) { 条件を満たしたときの処理 }
「条件A」に対して「!条件 A」の結果がどのようになるか(true / false)を以下の表にまとめました。
式 | 条件A | 式の結果 |
---|---|---|
!条件A | true | false |
false | true |
「条件A」がtrueの場合は「!条件A」はfalseになり、「条件A」がfalseの場合は「!条件A」はtrueになります。
論理演算子「 ! 」を使ったサンプルプログラム
論理演算子「 ! 」を使ったサンプルプログラムを以下に書きます。
サンプルプログラム1
<?php $result1 = true; if(!$result1) { echo '「!$result1」の結果は true です。'; } else { echo '「!$result1」の結果は true ではありません。'; }
<実行結果>
「!$result1」の結果は true ではありません。
<解説>
$result1の値がtrueであるため、「!$result1」結果は逆になりfalseです。
よって、elseブロックの「echo '「!$result1」の結果は true ではありません。';」が実行されます。
サンプルプログラム2
<?php $num = 50; if(!($num <= 10)) { echo $num . 'は10以下ではありません。'; } else { echo $num . 'は10以下です。'; }
<実行結果>
50は10以下ではありません。
<解説>
変数$numの値が50であるため、「$num <= 10」はfalseになりますが、さらに「!($num <= 10)」となっているため、結果は逆転してtrueになります。
よって、ifブロックの「echo $num . 'は10以下ではありません。';」が実行されます。
その他の論理演算子
論理演算子「xor」(排他的論理和)
他にも論理演算子「XOR」というものがあります。
この論理演算子を使う機会は、あまり無いと思います。
2つの条件がある場合に、片方がtrue、もう一方がfalseの場合にtrueになり、両方ともtrueまたは両方ともfalseの場合はfalseになります。
XORのことを「排他的論理和」と呼びます。
排他的論理和は、PHPプログラムでは演算子「xor」(アルファベット小文字3文字)を使って次のように書きます。
<構文>
if(条件A xor 条件B) { 条件を満たしたときの処理 }
条件Aと条件Bの結果(true / false)に対して「条件A xor 条件B」の結果がどのようになるか(true / false)を以下の表にまとめました。
式 | 条件A | 条件B | 式の結果 |
---|---|---|---|
条件A xor 条件B | true | true | false |
true | false | true | |
false | true | true | |
false | false | false |
この論理演算子は、滅多に使うことはありませんので紹介までにしておきます。
論理演算子「and」「or」
あと、論理演算子「and」と「or」というものがあります。
「条件A and 条件B」は「条件A && 条件B」と同じ意味であり、「条件A or 条件B」は「条件A || 条件B」と同じ意味です(※注1)。
この論理演算子も、滅多に使うことが無いと思いますので紹介までにしておきます。
※注1:複数の演算子が組み合わさった記述をした場合に「and」や「or」は、他の演算子よりも最も優先順位が低いという点が、「&&」と「||」との唯一の違いです。
論理演算子のまとめ
以上、PHPの論理演算子について、一通り説明しました。
表でまとめると次のようになります。
式 | 説明 |
---|---|
$a && $b | $aがtrueかつ$bがtrueの場合はtrue、そうでない場合はfalse |
$a || $b | $aがtrueまたは$bがtrueの場合はtrue、そうでない場合はfalse |
!$a | $aがtrueの場合はfalse、$aがfalseの場合はtrue |
$a xor $b | $aと$bの片方がtrueでもう一方がfalseの場合はtrue、そうでない場合はfalse |
$a and $b | $a && $b と同じ意味 |
$a or $b | $a || $b と同じ意味 |
おわりに
プログラムが複雑になり、複数の条件の組み合わせでの条件判定が必要になった場合は、論理演算子を使ってif文の条件を記述します。
論理演算子は頻繁に使うので、この記事の内容を読み直して理解しましょう。
また、次の記事に論理演算子の演習問題を掲載していますので、ぜひチャレンジして解いて、理解しましょう。
PHPプログラミング入門講座 〜 全記事一覧 〜
- PHPで開発された有名なWebサイト
- PHPでどのような機能が作れるか?
- サーバーについて理解しよう
- Webサーバーの処理について詳しく説明
- PHPプログラムの動作について説明
- パソコンにPHPの動作環境を構築しよう
- 一番簡単なPHPプログラムを書いてみよう
- ブラウザ画面にメッセージを表示しよう
- PHPタグの書き方と終了タグの省略
- 特殊なメッセージ(文字列)の書き方
- PHPプログラムで計算をしてみよう
- 変数
- 文字列の結合とヒアドキュメント
- ファイルの分割とファイルの読み込み
- コメント
- 定数
- 数値と文字列の性質・デバッグ
- 条件分岐 (if文)
- 論理型 (boolean型)
- 比較演算子
- 現在のページ:論理演算子
- 条件分岐 (switch文)
- 三項演算子
- 配列とforeach文
- 代入演算子 / 加算子 / 減算子
- ループ処理 (for文)
- ループ処理 (while文とdo-while文)
- break
- continue
- 連想配列
- 連想配列のループ処理