こんにちは、かつコーチです。
ここまでで「変数」「条件分岐」を紹介しました。
今回はPHP基礎編の最後として、「繰り返し処理(ループ)」を解説します。
同じ処理を何度も書かずに済むようになる、プログラミングの醍醐味を感じられるパートです。
for文:回数が決まっている繰り返し
基本の書き方
「1から5まで数字を表示する」のように、繰り返す回数が決まっている場合は for 文が便利です。
<?php
for ($i = 1; $i <= 5; $i++) {
echo $i . "\n";
}
// 出力: 1 2 3 4 5(改行区切り)
?>
for の括弧の中は、セミコロン(;)で区切られた3つのパートで構成されています。
$i = 1:最初に1回だけ実行される初期値$i <= 5:この条件が true の間、繰り返しが続く$i++:1周するごとに実行される処理(この場合は $i に1を足す)
「$iが1から始まって、5以下の間、1ずつ増やしながら繰り返す」という意味になります。
逆順に繰り返す
$i++ の部分を $i-- に変えれば、逆順にカウントダウンすることもできます。
<?php
for ($i = 5; $i >= 1; $i--) {
echo $i . "\n";
}
// 出力: 5 4 3 2 1
?>
初期値・条件・更新の3つを自由に組み合わせられるのが for 文の強みです。
while文:条件が続く限り繰り返す
基本の書き方
繰り返す回数が決まっておらず、「ある条件を満たす間はずっと繰り返す」という場合は while 文を使います。
<?php
$i = 1;
while ($i <= 5) {
echo $i . "\n";
$i++;
}
?>
結果は先ほどの for 文と同じですが、「条件を満たす間ずっと繰り返す」というシンプルな考え方で書けるのが while の特徴です。
for文とwhile文の使い分け
「回数が最初から決まっているならfor、決まっていないならwhile」というのが基本の使い分けです。
たとえば「ユーザーが正しいパスワードを入力するまで繰り返し聞く」のように、何回で終わるか事前に分からない処理はwhile文が向いています。
逆に「配列の要素数だけ繰り返す」のように回数が明確な処理は、for文の方が意図が伝わりやすいです。
foreach文:配列の中身を1つずつ取り出す
基本の書き方
PHPで一番よく使うことになるのが、実はこの foreach 文です。
配列に入っているデータを、先頭から順番に1つずつ取り出して処理できます。
<?php
$fruits = ["りんご", "みかん", "ぶどう"];
foreach ($fruits as $fruit) {
echo $fruit . "\n";
}
// 出力:
// りんご
// みかん
// ぶどう
?>
$fruits という配列から、要素を1つずつ $fruit という変数に入れながら繰り返しています。
配列の要素数を自分で数える必要がないので、for 文よりも直感的に書けます。
連想配列を繰り返す
連想配列(キーと値のペア)の場合は、キーも一緒に取り出せます。
<?php
$profile = [
"name" => "かつコーチ",
"job" => "エンジニア",
];
foreach ($profile as $key => $value) {
echo $key . ":" . $value . "\n";
}
// 出力:
// name:かつコーチ
// job:エンジニア
?>
as $key => $value の形にすることで、キーと値の両方を同時に取り出せます。
実務では、データベースから取得した複数件のデータを1件ずつ表示する場面などで、このforeach文を頻繁に使うことになります。
繰り返しを途中で止める:break / continue
break:ループそのものを終了する
for や while、foreach の中では、break と continue という2つの便利な命令が使えます。
break:繰り返しそのものを終了するcontinue:今回の周だけスキップして、次の周に進む
<?php
for ($i = 1; $i <= 10; $i++) {
if ($i == 5) {
break; // 5になったらループ終了
}
echo $i . "\n";
}
// 出力: 1 2 3 4
?>
continue:その周だけスキップする
<?php
for ($i = 1; $i <= 5; $i++) {
if ($i == 3) {
continue; // 3のときだけスキップ
}
echo $i . "\n";
}
// 出力: 1 2 4 5
?>
break は「もう探しているものが見つかったのでループごと終わりたい」場面で、continue は「条件に合わないデータだけ飛ばして処理を続けたい」場面で使うと覚えておくと使い分けやすいです。
つまずきやすいポイント:無限ループ
何が起きるのか
私が学習し始めた頃に一番冷や汗をかいたのが「無限ループ」です。
while 文で、ループを終わらせる条件を更新し忘れると、永遠に処理が終わらなくなります。
❌ Before:条件に関わる変数を更新し忘れる
<?php
$i = 1;
while ($i <= 5) {
echo $i . "\n";
// $i++; を書き忘れると、$iがずっと1のままで永遠にループしてしまう
}
?>
このコードを実行すると、$i の値が更新されないため、条件 $i <= 5 が永遠にtrueのままになり、ブラウザが固まってしまいます(ローカル環境なら最終的にPHPのタイムアウトでエラーになります)。
✅ After:ループの中で必ず条件に関わる変数を更新する
<?php
$i = 1;
while ($i <= 5) {
echo $i . "\n";
$i++; // 忘れずに更新する
}
?>
while 文を書くときは、ループの中で必ず条件に関わる変数を更新しているかを確認する癖をつけましょう。
もし処理が固まってしまったら、ブラウザのタブを閉じるか、ローカルサーバーを再起動すれば止められます。
foreachでは基本的に無限ループが起きにくい理由
余談ですが、foreach は配列の要素数ぶんだけ自動的に繰り返しが終わるため、while のように条件の更新を忘れて無限ループになる、という事故は基本的に起きません。
「無限ループが不安なら、配列を扱う繰り返しはforeachを優先する」というのも、初心者のうちは安心材料になります。
まとめ
この記事のポイント
for:繰り返す回数が決まっているときに使うwhile:条件を満たす間、繰り返し続けるときに使うforeach:配列の中身を1つずつ取り出すときに使う(実務で一番よく使う)breakはループごと終了、continueはその周だけスキップwhile文では無限ループにならないよう、条件に関わる変数の更新を忘れずに
これでPHP基礎編の最初の5本、「PHPとは」「環境構築」「変数」「条件分岐」「繰り返し処理」が完了しました。
次に読むべき記事
次からは配列の詳しい使い方や関数の作り方など、実務でよく使う内容に入っていきます。
→ 次の記事:PHPの配列の基本:作り方・追加・取り出し方