【PHP】for文の書き方と使い方の基本
PHPのfor文の基本的な書き方や、プログラムで同じ処理を繰り返す仕組みを解説します。変数や配列を使ったfor文の応用から、`break`や`continue`によるループ制御、変数のスコープ、複数のfor文を組み合わせる入れ子の使い方まで、初心者でもPHPの繰り返し処理を体系的に学べる記事です。
開発環境
- OS: Windows10
- Editor: Visual Studio Code
- PHP: 8.0以降
PHPのfor文とは
PHPのfor文は、プログラムの中で同じ処理を決められた回数だけ繰り返すための仕組みです。たとえば、「〇回この処理を行いたい」という場合にfor文を使用します。
for文は、主に以下の3つの要素を使って繰り返し処理を管理します。
- 初期化:ループが始まる前に一度だけ実行される部分です。通常は、何回繰り返したかを数えるための変数を準備します。
- 条件判定:ループを続けるかどうかを判断する部分です。この条件が「真(正しい)」である間はループ内の処理が実行され、「偽(正しくない)」になるとループは終了します。
- 更新処理:ループ内の処理が1回終わるごとに実行される部分です。通常は、初期化で準備した変数の値を増やしたり減らしたりして、次のループに備えます。
これらの「初期化」「条件判定」「更新処理」が協力し合うことで、for文は指定された回数だけ確実に処理を繰り返すことができます。これにより、同じコードを何度も書く手間を省き、プログラムを効率的に作成することが可能になります。
サンプルコード
php/chapter08/01.php
このコードは、PHPで繰り返し処理を行う「for文」の基本的な使い方を示しています。for文は、指定された回数だけ同じ処理を繰り返したいときに使います。
for文は、以下の3つの要素で構成されます。
- 初期化: ループを開始する前に一度だけ実行されます。ここでは
$i = 1で、変数$iに1を代入してループカウンタを初期化しています。 - 条件式: ループの各回ごとに評価されます。この条件式が
trueの間だけ、ループ内の処理が実行されます。ここでは$i <= 5で、$iが5以下の間はループを続ける、という条件を設定しています。 - 更新処理: ループ内の処理が1回終わるごとに実行されます。ここでは
$i++で、$iの値を1ずつ増やしています。
この例では、$iが1から始まり、5以下である限り$iの値を画面に出力し、その後$iの値を1増やします。これにより、1から5までの数値が順番に表示されます。
01.php1<?php 2// PHPのfor文の書き方 3// for (初期化; 条件式; 更新処理) { 4// // 条件式がtrueの間、繰り返し実行される文 5// } 6// 1から5までの数値を出力する基本的なfor文 7for ($i = 1; $i <= 5; $i++) { 8 echo $i . "\n"; 9} 10
php/chapter08/02.php
このコードは、for文の初期化と条件式に変数を活用する方法を示しています。先ほどの例では、ループの開始値と終了値を直接数字で指定していましたが、この例では$startと$endという変数を使用しています。
$startに1、$endに5を代入することで、for文の開始値と終了値を柔軟に変更できるようになります。これにより、コードを書き換えることなく、変数の値を変えるだけでループの範囲を調整できます。たとえば、$start = 10、$end = 20と変更すれば、10から20までを繰り返すループになります。このように変数を活用することで、より汎用的なプログラムを作成できます。
02.php1<?php 2// 変数を利用したfor文 3$start = 1; 4$end = 5; 5for ($i = $start; $i <= $end; $i++) { 6 echo "変数iの値は {$i} です。\n"; 7} 8
php/chapter08/03.php
このコードは、for文を使って配列の要素を順番に取り出して処理する方法を示しています。配列は複数のデータをまとめて管理するためのもので、それぞれのデータには「インデックス」と呼ばれる番号が割り振られています。PHPの配列のインデックスは、通常0から始まります。
for文では、$i = 0でインデックスを0から始め、$i < count($array)で配列の要素数(count($array)で取得できます)よりも小さい間、ループを繰り返します。$i++でインデックスを1ずつ増やしながら、$array[$i]という形で各要素にアクセスし、画面に出力しています。これにより、配列$arrayに入っている'apple'、'banana'、'cherry'が順番に表示されます。
03.php1<?php 2// 配列をfor文でループする 3$array = ['apple', 'banana', 'cherry']; 4for ($i = 0; $i < count($array); $i++) { 5 echo $array[$i] . "\n"; 6} 7
php/chapter08/04.php
このコードは、break文を使ってfor文の途中でループを強制的に終了させる方法を示しています。通常、for文は条件式がfalseになるまで繰り返しますが、特定の条件が満たされたときにすぐにループを抜けたい場合があります。
この例では、$iが0から9まで繰り返すループの中で、もし$iの値が5になったらbreak文が実行されます。breakが実行されると、その瞬間にfor文の処理が中断され、ループの次の行(for文の閉じ括弧}の次の行)に処理が移ります。そのため、このコードでは0から4までの数値が表示され、5になった時点でループが終了するため、5以降の数値は表示されません。
04.php1<?php 2// breakを使用して特定の条件でfor文を抜ける 3for ($i = 0; $i < 10; $i++) { 4 if ($i == 5) { 5 break; // 5でループを終了 6 } 7 echo $i . "\n"; 8} 9
php/chapter08/05.php
このコードは、continue文を使ってfor文の特定の回の処理をスキップし、次の繰り返しへ進む方法を示しています。break文がループ全体を終了させるのに対し、continue文はその回の残りの処理を中断し、次のループの更新処理へ移ります。
この例では、$iが0から9まで繰り返すループの中で、$i % 2 == 0という条件で$iが偶数かどうかを判定しています。%は割り算の余りを求める演算子です。もし$iが偶数(余りが0)であればcontinueが実行されます。continueが実行されると、echo $i . "\n"という行はスキップされ、すぐに次の$iの値でのループ処理に進みます。これにより、偶数は表示されず、奇数(1, 3, 5, 7, 9)だけが画面に表示されます。
05.php1<?php 2// continueを使用して特定の条件をスキップ 3for ($i = 0; $i < 10; $i++) { 4 if ($i % 2 == 0) { 5 continue; // 偶数をスキップ 6 } 7 echo $i . "\n"; 8} 9
php/chapter08/06.php
このコードは、for文の初期化部分と更新処理部分で、複数の変数を同時に操作できることを示しています。カンマ,で区切ることで、複数の変数を同時に宣言したり、更新したりすることが可能です。
この例では、初期化部分で$i = 0と$j = 10という2つの変数を同時に初期化しています。そして、更新処理部分で$i++と$j--という2つの処理を同時に実行しています。これにより、ループが1回進むごとに$iは1ずつ増え、$jは1ずつ減っていきます。この結果、$iが0から4まで変化する間に、$jは10から6まで変化する様子が画面に表示されます。
06.php1<?php 2// 複数の変数を操作するfor文 3for ($i = 0, $j = 10; $i < 5; $i++, $j--) { 4 echo "i: $i, j: $j\n"; 5} 6
php/chapter08/07.php
このコードは、プログラミングにおける「変数のスコープ(有効範囲)」という重要な概念を示しています。スコープとは、変数がプログラムのどの範囲からアクセスできるか、ということです。
PHPでは、for文のブロック{}の中で新しく宣言された変数(この場合は$innerVar)は、基本的にそのブロックの中でのみ有効です。ループが終了すると、その変数は利用できなくなります。
この例では、for文の中で$innerVarを宣言し、その値を表示しています。ループの中では問題なく$innerVarにアクセスできます。しかし、for文が終了した後のecho文で$innerVarにアクセスしようとすると、PHPは$innerVarが見つからないと判断します。??演算子(Null合体演算子)は、変数が定義されていない場合に後続の値('undefined')を使用するためのものです。この行を実行すると、「for文の外でinnerVarにアクセスできない: undefined」と表示され、$innerVarがループの外では存在しないことがわかります。
07.php1<?php 2// for文の中と外での変数のスコープ 3for ($i = 0; $i < 5; $i++) { 4 $innerVar = $i * 10; 5 echo "innerVar: $innerVar\n"; 6} 7echo "for文の外でinnerVarにアクセスできない: " . ($innerVar ?? 'undefined') . "\n"; 8
php/chapter08/08.php
このコードは、「for文の入れ子(ネスト)」という、for文の中にさらにfor文を書く方法を示しています。これは、二次元の表のような構造を処理する際によく使われます。
この例では、九九の表を作成しています。
- 外側のループ:
for ($i = 1; $i <= 9; $i++)は、掛け算の左側の数(1から9まで)を制御します。このループが1回実行されるたびに、九九の1つの段(例:1の段、2の段など)が処理されます。 - 内側のループ:
for ($j = 1; $j <= 9; $j++)は、掛け算の右側の数(1から9まで)を制御します。外側のループが1回実行される間に、内側のループは1から9まで全て実行されます。
具体的には、まず$iが1になり、その状態で$jが1から9まで変化しながら「1×1」「1×2」...「1×9」と計算・表示されます。内側のループが全て終わると、echo "\n";で改行され、外側のループに戻って$iが2に増えます。そして再び$jが1から9まで変化し、「2×1」「2×2」...「2×9」と計算・表示されます。この繰り返しによって、九九の表全体が作成・表示されます。\tはタブ文字を表し、表示の際に一定の間隔を空けるために使っています。
08.php1<?php 2// 九九の表を作成する練習問題 3for ($i = 1; $i <= 9; $i++) { // 外側のループは1から9までの数を繰り返し処理 4 for ($j = 1; $j <= 9; $j++) { // 内側のループは同じく1から9までの数を処理 5 $result = $i * $j; // 掛け算の結果を計算 6 echo $i . "×" . $j . "=" . $result . "\t"; // 結果を表示(\tはタブでスペースを空ける) 7 } 8 echo "\n"; // 各行の最後に改行を追加 9} 10
おわりに
本記事では、PHPのfor文がプログラムで同じ処理を繰り返す仕組みと、その基本的な書き方について学びました。変数の利用や配列の処理方法、そしてbreakやcontinueといった制御文を理解することで、より柔軟な繰り返し処理を実装できるようになります。また、変数のスコープの概念や、複数のfor文を組み合わせる入れ子の使い方を知ることで、複雑な処理も適切に記述できるようになりました。今回習得したfor文の知識は、PHPを用いたシステム開発において非常に重要な基礎となります。