【PHP】do-while文 -1回は実行する繰り返し処理

繰り返し処理にはdo-while文と呼ばれる仕組みがあります。
for文やwhile文と似ている部分がありますが、処理の順序が異なるため、結果に違いがあります。

ここではdo-while文ついて解説します。

なお、for文、while文については次の記事をご覧ください。

★ 内容

  • do-while文
  • while文とdo-while文の違い

do-while文とは

do-while文は繰り返し処理を行うための仕組みです。
while文と似ていますが、異なる点はdo-while文は“必ず1度は繰り返し処理を実行する”ことです。

基本構文

do-while文の基本構文は次のようになります。

do {
    // 処理1
    // 処理2
    // ・・・・・・・・
} while( 条件式 );

処理の順序

do-while文の処理順序は次のようになります。

  1. ブロックの処理を実行
  2. 条件式を実行
  3. 繰り返し処理の終了判定(条件式が真の場合は3へ、偽の場合は終了)

doに続くブロック(波括弧{})の処理が繰り返し処理の内容になりますが、while文とは異なり、1度処理を実行してから条件式を評価し、終了判定します。

サンプルコード

do-while文のサンプルコードをご覧ください。

ソースコード

<?php

$num = 1;
do {
    $num = $num * 2;
    echo '$num = '.$num."\n";
} while( $num < 30 );

?>

実行結果

$num = 2
$num = 4
$num = 8
$num = 16
$num = 32

このプログラムは2の累乗を“30を超えるまで”出力するプログラムです。

条件式は$num < 30となっており、$num = $num * 2で繰り返しごとに$numの値を変更しています。
5回目の繰り返しで$numの値は32になり、条件式がfalseになるため繰り返し処理を終了しています。

while文との違い

while文とdo-while文の違いは『繰り返し処理を必ず1度実行するかどうか』です。

次のサンプルコードをご覧ください。

ソースコード

<?php

$num = 1;
do {
    $num = $num * 2;
    echo '$num = '.$num."\n";
} while( $num < 0 );

?>

実行結果

$num = 2

実行結果から繰り返し処理を1回だけ実行していることがわかります。
条件式の評価よりも先に繰り返し処理を実行するため、このような結果になります。

同じようなwhile文の場合は何も出力されません。

ソースコード

<?php

$num = 1;
while( $num < 0 ) {
    $num = $num * 2;
    echo '$num = '.$num."\n";
}

?>

実行結果

while文では先に条件式の実行と終了判定が行われるので、繰り返し処理は実行されません。

演習問題

問題1

解答例

1からコマンドライン引数で与えた数値までの合計値を計算するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • do-while文を使って合計値を計算する

実行例

コマンドライン

php practice.php 27

実行結果

total : 378

問題2

解答例

0からコマンドライン引数で与えた数値まで偶数の合計値を計算するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • do-while文を使って合計値を計算する

実行例

コマンドライン

php practice.php 100

実行結果

total : 2550

問題3

解答例

九九を出力するプログラムを作成してください。
なお、下記条件を満たすものとします。

  • 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

まとめ

do-while文は必ず1度は繰り返し処理を実行するための仕組みです。
while文と似ていますが、条件式の実行と終了判定を繰り返し処理の前に実行するか、後に実行するかが違いますので覚えておきましょう。