気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. PHPの基礎
  2. 10 view

処理の繰り返し

要点のまとめ

・ループ(処理の繰り返し) — 条件を満たす間、処理を繰り返す
・for文 — 繰り返し回数が決まっている場合
  例:1月から12月まで出力
・while文 — 条件を満たす間繰り返し
  例:ファイルを先頭から最後の行まで処理
  while(条件)、do~while(条件)
・foreach文 — 配列の反復処理
・ループ中の処理制御
  break — ループを抜ける(「while (1)」との組み合わせでも役立つ)
  continue — ループの先頭に戻って処理を続ける
・終了条件を確かめること — 無限ループしないように
  自信がない場合 — php.iniで「max_execution_time = 1」(最大実行時間を制限)


 処理の繰り返し(ループ)には、指定回数だけ処理を繰り返すものと、ある条件を満たすまで処理を継続するものがあります。記述するための構文はいくつかあるので、用途に応じて適した構文を使用します。ここでは、代表的なパターンのみを紹介します。処理の繰り返しでは、ループが終了しなくなる無限ループに注意し、ループを途中で抜けるための構文もおさえておくと便利です。

for文(一定回数の繰り返し)

 「処理を5回繰り返す」のように繰り返す回数が決まっている場合は、for文を使用します。$iというカウンタと共に使用するのが典型的で、カウンタに初期値を設定して1回処理するごとに1を加算し、指定回数だけ繰り返された時点でループを抜けます。次のように、「for (初期値を設定; 終了条件; カウンタの増分) {繰り返す処理}」という構文で記述します。

<?php
for ($i = 1; $i <= 5; $i++) {
    echo $i;
}
?>

○実行結果

12345
 「カウンタの増分」に記述された「$i++」は$iに1を加算するという意味です(「++」は「加算子」と呼ばれる)。このように1ずつ加算するのが典型的ですが、加減する値は任意で構いません。

while文(指定条件を満たすまで処理を継続)

 「ファイルを先頭から終端まで処理する」のように、ある条件を満たすまで処理を繰り返す場合は、while文を使用します。「while (条件) 」という構文の条件を満たさなくなった時点(条件がfalseになった時点)でループが終了します。一定回数繰り返してループを抜けるわけではないので、無限ループしないように、何らかのタイミングで「条件」がfalseになるように終了条件を制御する必要があります。
 次の例では、2010年の2月の日付を一覧表示しています。「2010年2月29日」のように無効な日付になると、日付の妥当性をチェックするcheckdate関数がfalseを返すことを、ループの終了条件として利用しています。

<?php
$d = 1;
while (checkdate(2, $d, 2010)) {
    echo $d . "<br />";
    $d++;
}
?>

○実行結果

1
2
3
~~~(省略)~~~
26
27
28

foreach文(一括処理)

 まとまった値を一括で処理するという処理の繰り返しも可能です。それには、foreach文などを使用する方法があります。配列については後ほど説明します。

<?php
$ar = array("t"=>"東京", "c"=>"千葉", "k"=>"神奈川");
foreach ($ar as $key => $value) {
    echo "$key : $value <br />";
} 
?>

○実行結果

t : 東京
c : 千葉
k : 神奈川

break文(ループを途中で終了)

 ループを途中で抜けたい場合は、break文を使用します。ある条件に該当するタイミングで「break;」と記述します。次の例では、$iが3より大きくなった時点でループが終了するので、実行結果には1~3までしか表示されません。

<?php
for ($i = 1; $i <= 5; $i++) {
    if ($i > 3) {
        break;
    }
    echo $i;
}
?>

○実行結果

123

「while(1)」によるループ

 break文とwhile文を組み合わせて、「ある条件を満たした場合はループを抜ける」というループを組み立てることもできます。次の例の「while (1) 」によって、while文の「条件」 は常に満たされるので、このループは、break文などでループを抜けるまで続くことになります。次の例では、ランダムに取得した数値が5より大きかった場合はループを抜けます。

<?php
while (1) {
    $a = mt_rand(0, 10);
    echo $a . "<br />";
    if ($a > 5) {break;}
}
?>

○実行結果

4
5
9
 mt_rand関数はランダムな数値を取得する関数で、「mt_rand(0, 10)」と記述すると、0から10までの範囲で数値がランダムに返されます。

continue文(今回の処理をスキップ)

 ループ中に特定の条件を満たした場合のみ処理をスキップ(省略)する場合は、continue文を使用します。次の例では、$iが3の場合は処理がスキップされるので、3だけが出力されません。

<?php
for ($i = 1; $i <= 5; $i++) {
    if ($i == 3) {
        continue;
    }
    echo $i;
}
?>

○実行結果

1245

無限ループの回避

 処理を繰り返す場合は、いつまでもループが終了しない「無限ループ」の状態を避ける必要があります。終了条件を適切に設定していないと無限ループに陥りますが、テスト中や、少し変わったプログラムを試作している場合などには、ループが終了しないこともあるでしょう。
 無限ループが気になる場合は、最大実行時間を設定できるmax_execution_timeという設定項目が役立ちます。実際には、XAMPPではこの設定項目が60秒に設定されているので、永久に処理が終わらないことはないでしょうが、自信がない場合や、万が一のことを考えて、「max_execution_time = 1」(1秒)のようにある程度短めに設定しておくと良いかもしれません。レンタルサーバーなどでphp.iniを変更できない場合は、ini_set関数で設定する方法があります。

ini_set("max_execution_time", 20);

PHPの基礎の最近記事

  1. PHP 7の宇宙船演算子の使い方

  2. 条件分岐

  3. 処理の繰り返し

  4. 変数

関連記事

PAGE TOP