for文
目次
- 解説
- 1. for文
解説
1. for文
ループはその性質から、配列とセットで使用されることが非常に多いのですが、前のページで学習した通り、while文の場合は次のような書き方が必要となります。
- while文の前で、添字用の変数の作成と代入を行う
- ブロックの中で、添字用の変数を変化させる
- 条件式で、添字用の変数と要素数を比較する
この場合、添字管理用のコードが分散してしまうことや、書き忘れによる無限ループに繋がりやすいことなど、少し不便です。
static function practiceWhile() {
$sellCounter = [10, 20, 30];
$counterIndex = 0; // 添字に使う変数
while ($counterIndex < count($sellCounter)) { // 添字が2以下の間
Logger::echo($sellCounter[$counterIndex]); // 添字に応じた出力処理
$counterIndex++; // 添字を+1
}
}
そこでfor文の登場です。for文はこれらの添字管理用のコードが1行に凝縮されています。
static function practiceFor() {
$sellCounter = [10, 20, 30];
for ($idx = 0; $idx < count($sellCounter); $idx++) {
Logger::echo($sellCounter[$idx]);
}
}
キーワード「for」に続く丸括弧の中はセミコロン「;」で3つに区切られています。仮に
for ( A; B; C ) { ~ }
とした場合、
- Aで、添字用の変数の作成と代入を行う
- Bで、添字用の変数と要素数を比較する(=条件式)
- Cで、添字用の変数を変化させる
のようになっています。言い換えると、
- Aは、for文のいちばん最初に1回のみ実行される
- Bは、ブロックを実行する前に毎回評価される
- Cで、ブロックを実行した後に毎回実行される
という構造となっており、配列の添字などのように、連続して変化する値を使用するループ処理を行うことに最適です。このような場合にはwhile文よりfor文を使用するようにしましょう。
なお、for文では添字用の変数のスコープが、ブロック内に限定されるということも大きなメリットです。添字用の変数の変数名は、添字としての用途が明確となることや、for文の行が長くなり過ぎることを防ぐ目的から、「idx」や「i」のような短縮形を用いることが一般的です。
問題
確認問題
確認問題
次のコードの中で、for文の使い方が正しく、
変数aの値が最終的に8となる構文はどれか。
実践問題
(1) | VSCodeを起動し、ヘッダーメニューの「ファイル」>「フォルダーを開く...」から、「php_basic」プロジェクトを開いてください。 |
(2) | 「php_basic」プロジェクトの「ArrayAndLoop.php」を開いてください。 ※無い場合は「配列」を先に学習しましょう。 |
(3) | 「ArrayAndLoop」クラス内に次のサンプルコードのメソッドをコピー&ペーストし、 mainから呼び出せるようにして、「http://localhost/php_basic/ArrayAndLoop.php」へのアクセスで表示されることを確認してください。 |
(4) | コメント行に記された各問題文に対し、答えとなるプログラムコードを 問題文の次の空白行以降に書き込みまたは書き換えて、ブラウザから確認してください。 |
static function questionFor() {
// (問1)空白行にString型の配列変数arrayQ1を作成し、
// 「あ」「い」「う」「え」「お」の5つの要素を代入してください。
// 続けてfor文によるループ処理を作成し、
// 変数displayQ1にすべて結合させてください。
$displayQ1 = '';
Logger::echo($displayQ1);
// (問2)空白行にfor文によるループ処理を作成し、
// arrayQ1から「あ」「う」「お」のみを
// 変数displayQ2に結合させてください。
// ただし、arrayQ1はそのまま使用し、加工や複製をしてはいけません。
$displayQ2 = '';
Logger::echo($displayQ2);
// (問3)空白行にfor文によるループ処理を作成し、
// 変数displayQ3にarrayQ1の中身を逆順ですべて結合させてください。
// ただし、arrayQ1はそのまま使用し、加工や複製をしてはいけません。
$displayQ3 = '';
Logger::echo($displayQ3);
// (問4)空白行にfor文によるループ処理を作成し、
// 変数displayQ4にarrayQ1の中身の内、
// 「え」のみを除いて逆順で結合させてください。
// ただし、arrayQ1はそのまま使用し、加工や複製をしてはいけません。
$displayQ4 = '';
Logger::echo($displayQ4);
}