【PHP】do-while文 - 反復処理 / 1度は必ず繰り返し処理を実行する処理
同じ処理を繰り返すことを“反復処理”と呼びますが、PHPはfor文やwhile文の他にdo-while文を使ってその処理を実現することができます。
do-while文はfor文やwhile文などの一般的な反復処理と比べ処理の順序に違いがあります。
ここではdo-while文ついて解説します。
検証環境
do-while文
do-while文は“1度は必ず繰り返し処理を実行する反復処理”の構文です。
while文と似ていますが、繰り返しの継続判定を行うタイミングが異なります。
基本構文
do {
処理
} while( 条件式 );
while文と同様に条件式
と処理
の項目をプログラムに合わせて記述します。
処理の流れ
do-while文の処理の流れを以下に示します。
- ブロック(波括弧
{}
内)の処理を実行 - 条件式を実行
- 条件式の結果が
false
の場合は終了 - 1に戻る
while文に比べて繰り返しの継続判定よりも先に、ブロックの処理を実行するため、1度は必ず繰り返されます。
サンプル
<?php
$num = 1;
___ih_hl_start
do {
$num = $num * 2;
echo '[ $num ] '.$num."\n";
} while( $num < 30 );
___ih_hl_end
?>
$ php sample1.php
[ $num ] 2
[ $num ] 4
[ $num ] 8
[ $num ] 16
[ $num ] 32
2
の累乗が“30
を超えるまで”出力するプログラムです。
条件式は$num < 30
です。
繰り返しごとに$num = $num * 2
によって$num
の値を変更し、5回目で32
となり、条件式がfalse
になるため、while文を終了します。
while文との比較
while文とdo-while文の違いは『繰り返す処理を必ず1度実行するかどうか』です。
例えば、次のwhile文のコードは繰り返しを1度も実行しません。
<?php
$num = 1;
while( $num < 0 ) {
$num = $num * 2;
echo '[ $num ] '.$num."\n";
}
?>
$ php sample2.php
$
初めに継続判定しますが、$num < 0
は$num
が1
のためfalse
となり、1度も実行せずに終了します。
条件式と繰り返し処理を変えずにdo-while文に書き換えると次のようになります。
<?php
$num = 1;
___ih_hl_start
do {
$num = $num * 2;
echo '[ $num ] '.$num."\n";
} while( $num < 0 );
___ih_hl_end
?>
$ php sample3.php
[ $num ] 2
実行結果から繰り返し処理を1回だけ実行していることがわかります。
繰り返しの継続判定よりも先に繰り返し処理を実行するため、このような結果になります。
演習問題
1からコマンドライン引数で与えた数値までの合計値を計算するプログラムを作成してください。
なお、下記条件を満たすものとします。
- do-while文を使って合計値を計算する
$ php practice.php 27
total : 378
0からコマンドライン引数で与えた数値まで偶数の合計値を計算するプログラムを作成してください。
なお、下記条件を満たすものとします。
- do-while文を使って合計値を計算する
$ php practice.php 100
total : 2550
九九を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。
- do-while文を使う。
-- 1の段 --
1 × 1 = 1
1 × 2 = 2
1 × 3 = 3
1 × 4 = 4
1 × 5 = 5
1 × 6 = 6
1 × 7 = 7
1 × 8 = 8
1 × 9 = 9
-- 2の段 --
2 × 1 = 2
2 × 2 = 4
2 × 3 = 6
2 × 4 = 8
2 × 5 = 10
2 × 6 = 12
2 × 7 = 14
2 × 8 = 16
2 × 9 = 18
-- 3の段 --
3 × 1 = 3
3 × 2 = 6
3 × 3 = 9
3 × 4 = 12
3 × 5 = 15
3 × 6 = 18
3 × 7 = 21
3 × 8 = 24
3 × 9 = 27
-- 4の段 --
4 × 1 = 4
4 × 2 = 8
4 × 3 = 12
4 × 4 = 16
4 × 5 = 20
4 × 6 = 24
4 × 7 = 28
4 × 8 = 32
4 × 9 = 36
-- 5の段 --
5 × 1 = 5
5 × 2 = 10
5 × 3 = 15
5 × 4 = 20
5 × 5 = 25
5 × 6 = 30
5 × 7 = 35
5 × 8 = 40
5 × 9 = 45
-- 6の段 --
6 × 1 = 6
6 × 2 = 12
6 × 3 = 18
6 × 4 = 24
6 × 5 = 30
6 × 6 = 36
6 × 7 = 42
6 × 8 = 48
6 × 9 = 54
-- 7の段 --
7 × 1 = 7
7 × 2 = 14
7 × 3 = 21
7 × 4 = 28
7 × 5 = 35
7 × 6 = 42
7 × 7 = 49
7 × 8 = 56
7 × 9 = 63
-- 8の段 --
8 × 1 = 8
8 × 2 = 16
8 × 3 = 24
8 × 4 = 32
8 × 5 = 40
8 × 6 = 48
8 × 7 = 56
8 × 8 = 64
8 × 9 = 72
-- 9の段 --
9 × 1 = 9
9 × 2 = 18
9 × 3 = 27
9 × 4 = 36
9 × 5 = 45
9 × 6 = 54
9 × 7 = 63
9 × 8 = 72
9 × 9 = 81