【PHP】else if文 - 条件分岐 / 複数条件による処理の分岐
if文で複数の条件分岐を行うにはelseif文を使います。
ここではelse if文について解説します。
検証環境
elseif文
elseif文は“if文の複数条件分岐を実現する構文”です。
任意の数だけelseif文で条件分岐を作ることができます。
基本構文
if( 論理値1 ) {
// 論理値1が真(true)の場合の処理
}
___ih_hl_start
else if( 論理値2 ) {
// 論理値2が真(true)の場合の処理
}
___ih_hl_end
elseif文はif文に続けて記述します。
elseif文と直前の波括弧の間にはスペースや改行、コメントを含むことができます。
また、1つのif文に複数のelseif文の使用が可能で、2個目以降も1個目と同様に波括弧に続けて記述します。
if( 論理値1 ) {
// 論理値1が真(true)の場合の処理
} else if( 論理値2 ) {
// 論理値2が真(true)の場合の処理
} else if( 論理値3 ) {
// 論理値3が真(true)の場合の処理
} else if( 論理値4 ) {
// 論理値4が真(true)の場合の処理
}
処理の流れ
if文(elseif構文含む)は順番に分岐処理の実行可否を評価します。
論理値がtrue
である条件分岐があった場合、その分岐の波括弧内の処理のみを実行し、以降の条件分岐はスキップされます。
そのため、if文が実行できる分岐処理は1つのみになります。
サンプル
<?php
$x = 180;
if( $x <= 100 ) {
echo "100以下の値です。\n";
}
___ih_hl_start
else if( $x <= 200 ) {
echo "200以下の値です。\n";
}
else if( $x <= 300 ) {
echo "300以下の値です。\n";
}
___ih_hl_end
echo '処理を終了します。';
?>
$ php sample.php
200以下の値です。
処理を終了します。
8〜13行目に2つのelseif文による条件分岐があります。
処理の流れは、初めに5行目のif文の実行可否を評価します。
$x <= 100
はfalse
のため、次のelse文の実行可否を評価します。
$x <= 200
はtrue
のため、その波括弧内の処理が実行されます。
最後のelseif文の$x <= 300
もtrue
ですが、if文(elseif文を含む)によって実行する分岐処理は1つのため、スキップされます。
つまり、先に定義した条件分岐から優先的に評価・実行するということです。
また、いずれの分岐処理にも該当しない場合、全ての分岐処理をスキップします。
<?php
___ih_diff_start
-$x = 180;
+$x = 500;
___ih_diff_end
if( $x <= 100 ) {
echo "100以下の値です。\n";
}
else if( $x <= 200 ) {
echo "200以下の値です。\n";
}
else if( $x <= 300 ) {
echo "300以下の値です。\n";
}
echo '処理を終了します。';
?>
$ php sample.php
処理を終了します。
演習問題
お店のお会計で割引を適用するプログラムを作成してください。
なお、下記の条件を満たすものとします。
- 合計金額は『単価×個数』で計算する
- 単価は150円とする
- 個数はコマンドライン引数で与える
- 割引の条件
10%OFF : 個数が5個以上
20%OFF : 個数が10個以上
$ php practice.php 8
割引金額 : 120円
合計金額(割引前) : 1200円
合計金額(割引後) : 1080円
$ php practice.php 12
割引金額 : 360円
合計金額(割引前) : 1800円
合計金額(割引後) : 1440円
お店のお会計で割引を適用するプログラムを作成してください。
なお、下記の条件を満たすものとします。
- 合計金額は『単価×個数』で計算する
- 単価と個数はコマンドライン引数で与える(単価、個数の順)
- 割引の条件
15%OFF : 合計金額が10,000円以上
10%OFF : 合計金額が5,000円以上または個数が10個以上
5%OFF : 個数が5個以上
$ php practice.php 1000 11
割引率 : 15%
割引金額 : 1650円
合計金額(割引前) : 11000円
合計金額(割引後) : 9350円
$ php practice.php 100 7
割引率 : 5%
割引金額 : 35円
合計金額(割引前) : 700円
合計金額(割引後) : 665円