【PHP】while文 - 反復処理 / 同じ処理を繰り返す処理

【PHP】while文 - 反復処理 / 同じ処理を繰り返す処理

同じ処理を繰り返すことを“反復処理”と呼びますが、PHPはfor文以外にwhile文を使ってその処理を実現することができます。

ここでは、while文について解説します。

検証環境

while文

while文は反復処理を実現する構文です。

基本的にはfor文と同じ役割を担いますが、while文は反復回数が決まっていない場合に使うことが多くあります。

基本構文

while( 条件式 ) {
    処理
}

条件式処理の項目を目的のプログラムに合わせて記述します。

各項目の内容は次の通りです。

項目 内容
条件式 繰り返しの条件
処理 繰り返す処理

処理の流れ

while文の処理の流れを以下に示します。

  1. 条件式を実行
  2. 条件式の結果がfalseの場合は終了
  3. ブロック(波括弧{}内)の処理を実行
  4. 1に戻る

while文はfor文に比べ、条件式で使う変数の値を変える変化式がありません。

そのため、ブロック内で変化式と同等の処理を行います。

サンプル

<?php

$num = 1;

___ih_hl_start
while( $num < 30 ) {
    $num = $num * 2;
    echo '[ $num ] '.$num."\n";
}
___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文の条件式にtrueを記述すると、無限ループになります。

<?php

___ih_hl_start
while( true ) {
    echo "infinite loop.\n";
}
___ih_hl_end

?>
$ php sample2.php
infinite loop.
infinite loop.
infinite loop.
infinite loop.
infinite loop.
.......

実行するとwhile文が無限ループし、プログラムは終了されません。

そのため、コマンドラインのControl+Cの入力によってプログラムを中断する必要があります。

誤って無限ループになった際に中断する方法として使えますので覚えておきましょう。

演習問題

問題1

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

  • while文を使って合計値を計算する
$ php practice.php 27
total : 378

問題2

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

  • while文を使って合計値を計算する
$ php practice.php 100
total : 2550

問題3

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

  • 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