
【6日でできるPHP入門】複雑な条件分岐
プログラムが進化してくると、単純な「○○なら〜する」だけでなく、複数の条件を組み合わせた「複雑な条件分岐」が必要になる場面が多くなります。
PHPでは論理演算子やif文のネスト(入れ子)を活用することで、複雑な条件でも柔軟に処理を分けることができます。この記事では、実際のサンプルを通じて複雑な条件分岐の考え方と書き方を丁寧に解説します。

1.論理演算子による複雑な条件分岐
1.1. PHPの論理演算子
複数の条件を組み合わせる場合、論理演算子を使用します。主な論理演算子は下記の通りです。
演算子 | 名前 | 意味 | 例 | 結果 |
---|---|---|---|---|
and, && | 論理積(AND) | すべての条件がtrueのときtrue | $a && $b | 両方trueでtrue |
or, || | 論理和(OR) | どちらか1つでもtrueならtrue | $a or $b | どちらかtrueでtrue |
xor | 排他的論理和(XOR) | どちらか一方がtrue(両方trueはfalse) | $a xor $b | 片方だけtrueでtrue |
! | 否定(NOT) | trueをfalse、falseをtrueに反転 | !$a | $aがfalseでtrue |
サンプル1:複数条件の組み合わせ
ファイル名: lesson32_1.php
<?php
$score = 80;
$attendance = 95;
if ($score >= 70 && $attendance >= 90) {
echo "合格です(成績と出席率の両方クリア)";
} else {
echo "条件を満たしていません";
}
?>
実行結果

サンプル2:orとxorの使い方
ファイル名: lesson32_2.php
<?php
$a = false;
$b = true;
if ($a or $b) {
echo "どちらかがtrueです<br>";
}
if ($a xor $b) {
echo "どちらか一方だけtrueです";
}
?>
実行結果

2.if文のネスト(入れ子構造)
2.1. ネストで複雑な条件を分岐
if文の中にさらにif文を書くことで、より複雑な分岐処理が可能になります。
サンプル3:年齢と会員種別で料金を分岐
ファイル名: lesson32_3.php
<?php
$age = 17;
$type = "学生";
if ($age < 18) {
if ($type === "学生") {
echo "割引料金(学生未成年)";
} else {
echo "未成年割引料金";
}
} else {
if ($type === "学生") {
echo "学生割引料金";
} else {
echo "一般料金";
}
}
?>
実行結果

3.複雑な条件式のポイント
3.1. 論理積(AND)・論理和(OR)の動作確認表
A | B | A && B | A || B | A xor B | !A |
---|---|---|---|---|---|
true | true | true | true | false | false |
true | false | false | true | true | false |
false | true | false | true | true | true |
false | false | false | false | false | true |
4.複雑な条件分岐を使った実践例
サンプル4:月ごとの日数を判定
ファイル名: lesson32_4.php
<?php
$month = 2; // 月を指定
if ($month >= 1 && $month <= 12) {
if ($month === 2) {
$days = "28日または29日";
} else if ($month === 4 || $month === 6 || $month === 9 || $month === 11) {
$days = "30日";
} else {
$days = "31日";
}
echo "{$month}月の日数は{$days}です。";
} else {
echo "{$month}月は存在しません。";
}
?>
実行結果($month=2 の場合)

まとめ
- 複雑な条件分岐には論理演算子やif文のネストが必須
&&
や||
を組み合わせて多条件の判定を柔軟に- ネストや組み合わせを整理して、可読性の高いコードを意識しよう。
実際にサンプルを入力・変更しながら、複雑な条件分岐のパターンを自分のものにしてください!