# ch03 — 配列を書き換える

Source: https://php-school.pages.dev/topics/array-basic/ch03-modify-array/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 配列の基本
Level: L2

Reference (official): https://www.php.net/manual/ja/language.types.array.php

## 本文

# ch03 — 配列を書き換える

## 概要

配列は「作って終わり」では使い物にならない。実務では **作った後に値を入れ替える・追加する・削除する** ことが本番で、入力データに応じて配列を組み立てたり、結果を集めて配列に詰めたりする処理が圧倒的に多い。この章では「すでにある配列に手を加える」ための 3 つの基本操作 (書き換え・末尾追加・削除) をまとめて覚える。

書き換えは `$arr[1] = "X"` のように **添字アクセスの左辺に値を代入** するだけ。これで既存の要素が新しい値に置き換わる。新しい要素を末尾に足したい場合は `$arr[] = "X"` と書く。添字を省略した書き方で、PHP は自動的に「現在の最大添字 + 1」に値を入れてくれる。これは **シンタックスシュガー** (省略記法) で、配列に値を流し込むループでよく出てくる。

削除は少し特殊で、`unset($arr[1])` を使う。注意点は **削除しても残った要素の添字が詰められない** こと。`[10, 20, 30]` から `unset($arr[1])` すると、結果は `[0 => 10, 2 => 30]` となり、`1` の位置がそのまま欠番になる。`print_r` で見ると「あれ、1 がない」と驚くが、これは PHP の配列が内部的にキーと値のペアで動いている (前章の「整数添字も連想配列の一種」) ことの帰結だ。

## 学習目標

- `$arr[0] = X` で既存の要素を書き換えられる
- `$arr[] = X` で配列の末尾に追加できる
- 空の配列から始めて要素を組み立てられる

## 所要時間

スライド 4 分 + ドリル 3 問 = **15 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | `$arr[1]` の値を書き換えて全要素を `print_r` で表示 |
| 02 | `$arr[] = X` で末尾に値を追加して `print_r` で表示 |
| 03 | 空配列から for ループで要素を組み立てて `print_r` で表示 |

## 採点

```bash
php scripts/grade.php topics/array-basic/ch03-modify-array/drill/01-overwrite/
```

## 関連チャプター

- [`ch02-access-index`](../ch02-access-index/) — 書き換え対象を取り出す (この章の前提)
- [`ch05-for-array`](../ch05-for-array/) — for ループで配列を組み立てる
- [`ch08-array-manipulation`](../ch08-array-manipulation/) — `array_push` / `array_pop` などの専用関数

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 4 / Chapter 3
  目的: $arr[i] = X による既存要素の上書きと $arr[] = X による末尾追加で配列を作り変えられるようにする
  扱わない: 関数 (ch04) / for で走査 (ch05) / explode・implode (ch06-07) / 連想配列 (L5)
  読み上げ時間目安: 4 分〜4 分半
-->

# 配列を書き換える

Lesson 4 / Chapter 3

---

## 既存の要素を書き換える

```php
<?php
$nums = [10, 20, 30];
$nums[1] = 99;

print_r($nums);
```

実行結果:

```
Array
(
    [0] => 10
    [1] => 99
    [2] => 30
)
```

- `$arr[添字] = 値;` で **その位置の値を書き換える**
- 元の値は失われる

---

## 末尾に追加する `$arr[] = X`

```php
<?php
$nums = [10, 20, 30];
$nums[] = 40;
$nums[] = 50;

print_r($nums);
```

実行結果:

```
Array
(
    [0] => 10
    [1] => 20
    [2] => 30
    [3] => 40
    [4] => 50
)
```

- `$arr[] = 値;` は **空の添字で代入** = 末尾追加
- 添字は自動的に割り当てられる

---

## 空の配列から組み立てる

```php
<?php
$nums = [];

$nums[] = 1;
$nums[] = 2;
$nums[] = 3;

print_r($nums);
```

- `$nums = [];` で空の配列を作る
- そこから 1 個ずつ `$nums[] = ...` で追加していく
- ループと組み合わせるときの基本パターン

---

## ループで配列を組み立てる

```php
<?php
$squares = [];
for ($i = 1; $i <= 5; $i++) {
    $squares[] = $i * $i;
}

print_r($squares);
```

実行結果:

```
Array
(
    [0] => 1
    [1] => 4
    [2] => 9
    [3] => 16
    [4] => 25
)
```

- 計算結果を 1 つずつ末尾に追加していく定番の形

---

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

✅ `$arr[i] = X` で既存の要素を書き換えられる
✅ `$arr[] = X` で末尾に追加できる
✅ 空の配列 `[]` から始めて要素を組み立てられる
✅ for ループで配列を作れる

→ ドリルへ
