# ch02 — 添字でアクセス

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

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

## 本文

# ch02 — 添字でアクセス

## 概要

配列を作ったら、次は **中の値を 1 つだけ取り出す** 操作が必要になる。「2 番目の生徒の点数を出したい」「最初の要素だけ別の処理に渡したい」というやつだ。PHP では `$arr[0]` のように、変数名のうしろに `[添字]` を書くことで要素にアクセスする。これを **添字アクセス (インデックスアクセス)** と呼ぶ。

注意したいのは **添字は 0 から始まる** という点。`[10, 20, 30]` という配列なら、`$arr[0]` が `10`、`$arr[1]` が `20`、`$arr[2]` が `30` になる。「1 番目」と数えると `$arr[1]` に手が伸びてしまいがちで、これが初学者の典型的なバグの原因になる。実物のドリルで「先頭」「最後」「真ん中」を取り出して、添字と要素の対応を頭に染み込ませる。

存在しない添字にアクセスすると、PHP は `null` を返した上で **Warning (警告)** を出す (PHP 8 以降は警告レベルが上がっている)。エラーで止まらないため気付きにくいが、`print_r` や `var_dump` で確認するクセをつけておくと早く異変に気付ける。最後の要素は `$arr[count($arr) - 1]` で取り出すのが定石で、PHP には負の添字で末尾を指す構文 (`$arr[-1]` のようなもの) は標準では用意されていない。

## 学習目標

- `$arr[0]` で配列の 1 番目の要素を取り出せる
- 添字 (インデックス) が **0 から始まる** ことを覚える
- `count($arr) - 1` で最後の要素にアクセスできる

## 所要時間

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

## ドリル

| no | 内容 |
|---|---|
| 01 | `$arr[0]` で先頭の要素を取り出して出力 |
| 02 | `$arr[count($arr) - 1]` で最後の要素を出力 |
| 03 | 真ん中の要素 `$arr[1]` を出力 |

## 採点

```bash
php scripts/grade.php topics/array-basic/ch02-access-index/drill/01-first/
```

## 関連チャプター

- [`ch01-create-array`](../ch01-create-array/) — 配列を作る (この章の前提)
- [`ch03-modify-array`](../ch03-modify-array/) — 取り出した位置を書き換える
- [`ch05-for-array`](../ch05-for-array/) — 添字を for ループで動かして全要素にアクセス

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 4 / Chapter 2
  目的: 配列の要素を $arr[i] で取り出せるようにする。0 始まりと count() を理解する
  扱わない: 書き換え (ch03) / 関数 (ch04) / 連想配列 (L5)
  読み上げ時間目安: 4 分〜4 分半
-->

# 添字でアクセス

Lesson 4 / Chapter 2

---

## 配列から 1 個ずつ取り出す

```php
<?php
$nums = [10, 20, 30];
echo $nums[0] . "\n";
echo $nums[1] . "\n";
echo $nums[2] . "\n";
```

実行結果:

```
10
20
30
```

- `$arr[番号]` で配列から値を取り出す
- この **番号** を「添字」「インデックス」と呼ぶ

---

## 添字は **0 から** 始まる

```php
<?php
$fruits = ["りんご", "みかん", "ぶどう"];

echo $fruits[0] . "\n";  // りんご (1 番目)
echo $fruits[1] . "\n";  // みかん (2 番目)
echo $fruits[2] . "\n";  // ぶどう (3 番目)
```

- **1 番目の要素は `[0]`**
- 2 番目は `[1]`、3 番目は `[2]`
- これは初学者が最も間違えるポイント

---

## 要素数は `count()` で取る

```php
<?php
$nums = [10, 20, 30, 40, 50];
echo count($nums) . "\n";   // 5
```

- `count($arr)` で配列の要素数 (長さ) が分かる
- 上の例では 5 個入っているので 5

---

## 最後の要素は `count() - 1`

```php
<?php
$nums = [10, 20, 30, 40, 50];
$last = $nums[count($nums) - 1];
echo $last . "\n";   // 50
```

- 添字は 0 始まりなので、最後の添字は `要素数 - 1`
- 要素数 5 → 最後の添字は `5 - 1 = 4`
- `$nums[4]` が 50

---

## 範囲外の添字に注意

```php
<?php
$nums = [10, 20, 30];
echo $nums[10] . "\n";   // 警告: Undefined array key 10
```

- 存在しない添字にアクセスすると **警告** が出て、値は空になる
- アクセス前に `count()` で長さを確認する習慣をつける

---

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

✅ `$arr[0]` で先頭の要素を取り出せる
✅ 添字が 0 始まりだと理解している
✅ `count($arr)` で要素数を取れる
✅ `$arr[count($arr) - 1]` で最後の要素を取れる

→ ドリルへ
