6.ループさせよう

ループは、決まった処理を何度も行う時に便利な仕組みです。

while文

whileは括弧()内の判定を行い、trueであればループを継続し、falseであればループが終わります。

コードを以下のように書き換えてください。

sample/index.php
<?php

$num = 0;

while ($num <= 10) {
    echo $num . '<br>';

    $num++;
}

whileは、括弧()内がtrueである限り処理を繰り返し行います(ループ)。

++は以前の講座で解説しましたが、1を足すという意味になります。

上記のコードでは$numが10を超えるまで処理を実行するので、$numが11になるとfalseになりループが終了します。

while文で注意しないといけないのは、永遠にfalseにならないコードを書いてしまうと、無限ループが発生してしまう点です。

以下のコードはブラウザで確認しないでください。

<?php

$num = 0;

// $num++を書き忘れた場合
while ($num <= 10) {
    echo $num . '<br>';
}

$num++を書き忘れると$numの中身はずっと0のままなので、無限ループになります。

PHPの処理はデフォルトで30秒以上時間がかかると処理を停止しますので、無限ループが永遠に続くわけではありませんが、CPUを使うので、PCに負荷がかかります。

次に、breakとcontinueを解説します。

sample/index.php
<?php

$num = 0;

while ($num <= 10) {

    echo $num . '<br>';
    
    if ($num === 3) {
        break;
    }

    $num++;
}

ブラウザで確認してみると、数字は3までしか出力されていません。

breakは、ループを終了させます。

上記コードでは、$num === 3がtrueになるとbreakが実行されてループが終了しています。

sample/index.php
<?php

$num = 0;

while ($num <= 10) {

    if ($num === 3) {
        $num++;
        continue;
    }

    echo $num . '<br>';

    $num++;
}

このコードでは、3の出力だけスキップされています。

continueが実行されると、continueより後にあるコードは実行されず、次のループに進みます。

上記コードでは$numが3の時だけechoせず、$num++だけを行い、次のループに進めています。

for文

for文は、繰り返す回数が決まっている時に使用します。

sample/index.php
<?php

for ($i = 0;$i <= 10; $i++) {
    echo $i . '<br>';
}

for文の括弧内()には、3つの式が入ります。

1つ目の式$i = 0;にカウントで使用する変数を定義します。プログラミングでは0からカウントしていくので、0を$iに代入します。

変数名は$iとするのが通例なので、ここでは$iとしています。

2つ目の式$i <= 10;は、判定を行う式です。ここがtrueであれば、処理を実行し、falseであれば処理を実行せずループが終了します。

上記のコードでは、$iが10を超えるとfalseになり、ループが終了します。

3つ目の式$i++;は、ループごとの最後に実行されます。ここでは、ループごとに$iに1を足す処理を行っています。

while文の解説で書いた以下のコードとやっている処理は同じです。

<?php

$num = 0;

while ($num <= 10) {
    echo $num . '<br>';

    $num++;
}

for文を使うことで、このコードをよりシンプルに書くことができます。

foreach文

foreach文は、配列をループ処理する時に便利です。

sample/index.php
<?php

$group = array('田中', '鈴木', '佐藤');

foreach($group as $member) {
    $msg = $member . 'さん<br>';

    echo $msg;
}

foreachの括弧内()は(配列, 各要素を格納する変数)が入ります。

ループは、配列の数だけ繰り返されますので、カウントするコードを書く必要がありません。

上記コードでは、最初のループで$memberに「田中」が代入され、処理が行われます。

2回目のループでは$memberに「鈴木」、3回目のループでは「佐藤」が入ります。

連想配列で、キーと値の両方を変数に入れることもできます。

sample/index.php
<?php

$fruits = array(
    'banana' => 'バナナ',
    'apple' => 'りんご',
    'orange' => 'みかん',
);

foreach ($fruits as $key => $value) {
    echo $value . 'は英語で' . $key . 'です。<br>';
}

$keyには配列のキー、$valueには値が代入されます。