# ch01 — for 文

Source: https://php-school.pages.dev/topics/loop/ch01-for/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 繰り返し
Level: L2

Reference (official): https://www.php.net/manual/ja/control-structures.for.php

## 本文

# ch01 — for 文

## 概要

プログラムの仕事の多くは「**同じような処理を繰り返す**」ことだ。1 から 100 までの数を出力したい時、`echo 1; echo 2; ...` と 100 行書くのは現実的ではないし、コピペで済ませようとした瞬間にバグの温床になる。ループは、この「繰り返し」をコンピュータに任せて、人間が書くコードを 1 ブロックに圧縮するためのしくみだ。

PHP で最も基本的なループが **`for` 文**。`for ($i = 0; $i < N; $i++)` という形は、3 つのパートで構成されている。**初期化** (`$i = 0`、ループ開始前に 1 回だけ実行)、**条件** (`$i < N`、毎回チェックされ、真の間だけ繰り返す)、**更新** (`$i++`、各反復の最後に実行)。この 3 点セットで「**何回回るか**」が明示できるので、回数が事前に分かっているループには `for` が最適になる。

初学者がここで一番踏むのが **オフバイワンエラー** だ。「1 から N まで」のつもりで `$i < N` と書くと N が出力されない (実際は 1 から N-1 までしか回らない)。`<=` を使うか、開始を `1` にして `$i <= N` にするか、流派は色々あるが、まずは自分で書いて 1 つズレた結果を見ることが最大の学びになる。もうひとつ、`$i++` を書き忘れたり条件を絶対に偽にならない式にすると **無限ループ** に突入してターミナルが止まる。Ctrl+C で止められる、と最初に知っておくと安心できる。

## 学習目標

- `for ($i = 0; $i < N; $i++)` の 3 つの部分の意味を言える
- 同じ処理を N 回繰り返せる
- カウンタ変数 `$i` を使って値を 1 つずつ変えながら処理できる

## 所要時間

スライド 5 分 + ドリル 3 問 = **20 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | 1 から 5 までを 1 行ずつ出力 |
| 02 | 入力 N で 1+2+...+N の合計を出力 |
| 03 | 入力 N で N の段の九九を出力 |

## 採点

```bash
php scripts/grade.php topics/loop/ch01-for/drill/01-count-1-to-5/
```

## 関連チャプター

- [`ch02-while`](../ch02-while/) — 回数ではなく「条件」で繰り返す別の書き方
- [`ch04-break-continue`](../ch04-break-continue/) — ループの途中で抜ける・スキップする
- [`ch05-nested`](../ch05-nested/) — `for` を 2 重に入れ子にして表や図形を作る

## スライド

---
marp: true
theme: dojo
paginate: true
size: 16:9
---

<!--
LLM_CONTEXT:
  Lesson 3 / Chapter 1
  目的: for 文で「決まった回数」繰り返す処理を書けるようにする
  扱わない: while (ch02) / do-while (ch03) / break・continue (ch04) / 入れ子 (ch05)
  読み上げ時間目安: 4 分半〜5 分
-->

# for 文

Lesson 3 / Chapter 1

---

## 同じ処理を何回も書くのは大変

```php
<?php
echo "1\n";
echo "2\n";
echo "3\n";
echo "4\n";
echo "5\n";
```

- 5 回ならまだ書ける
- 100 回なら? 1000 回なら?
- **ループ** を使えば 1 回書くだけで済む

---

## `for` 文の形

```php
<?php
for ($i = 1; $i <= 5; $i++) {
    echo $i . "\n";
}
```

実行結果:

```
1
2
3
4
5
```

- `for (初期化; 条件; 更新) { 処理 }`
- 条件が真の間、`{ }` の中を繰り返す

---

## 3 つの部分を分解する

```php
for ($i = 1; $i <= 5; $i++) {
    echo $i . "\n";
}
```

| 部分 | 役割 | 実行タイミング |
|---|---|---|
| `$i = 1` | 初期化 | ループ開始時に 1 回だけ |
| `$i <= 5` | 条件 | 毎回チェック (真なら続行) |
| `$i++` | 更新 | 1 回処理した後に実行 |

---

## `$i++` は「1 増やす」

```php
<?php
$i = 0;
$i++;       // $i = 1
$i++;       // $i = 2
echo $i;    // 2
```

- `$i++` は `$i = $i + 1` と同じ
- ループのカウンタを進めるためによく使う
- `$i--` なら 1 減らす

---

## 0 から始める書き方もある

```php
<?php
for ($i = 0; $i < 5; $i++) {
    echo $i . "\n";   // 0 1 2 3 4
}
```

- `$i = 0` 開始 + `$i < 5` 条件 → **0 から 4 まで 5 回**
- `$i = 1` 開始 + `$i <= 5` 条件 → **1 から 5 まで 5 回**
- どちらも 5 回繰り返すが、出る値が違うので問題に合わせる

---

## このチャプターでできるようになること

✅ `for` 文で決まった回数だけ処理を繰り返せる
✅ カウンタ変数 `$i` を使って値を変えながら処理できる
✅ `$i++` で 1 ずつ増やせる
✅ 初期値・条件を変えて回数を調整できる

→ ドリルへ
