# ch06 — 文字列を配列に分割

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

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

## 本文

# ch06 — 文字列を配列に分割

## 概要

実際のプログラムでは、入力データが **1 つの長い文字列** として渡されることが多い。「CSV ファイルの 1 行」「URL のクエリパラメータ」「ユーザーが入力したカンマ区切りのタグ」など、ぜんぶ文字列のまま受け取って、これを **配列に分解** してからループで処理する。この「文字列 → 配列」の橋渡しを担うのが `explode` 関数だ。

`explode($sep, $s)` は「`$s` を `$sep` で区切って配列にする」と読む。たとえば `explode(",", "a,b,c")` は `["a", "b", "c"]` を返す。区切り文字は 1 文字でも複数文字でもよく、`explode(" -> ", "x -> y -> z")` のようにも書ける。区切り文字が文字列内に存在しない場合は、元の文字列がそのまま 1 要素の配列として返る (`["a,b,c"]` ではなく `["a,b,c"]` — 元の文字列のみ)。

第 3 引数 `limit` を渡すと **分割数の上限** を制御できる。`explode(",", "a,b,c,d", 2)` は `["a", "b,c,d"]` のように、最初の区切り文字までで分割を打ち止めにする。「最初のカンマまでをキーとして取り出したい」といった用途で重宝する。この章では分割した配列を for で走査するところまでやって、文字列処理と配列処理を地続きにつなぐ感覚を作る。

## 学習目標

- `explode($sep, $s)` で文字列を区切り文字で分割し、配列にできる
- カンマ区切り・スペース区切りの入力を扱える
- 分割結果を for ループで処理できる

## 所要時間

スライド 4 分 + ドリル 2 問 = **13 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | `"a,b,c"` を `,` で分割し、各要素を 1 行ずつ出力 |
| 02 | スペース区切り入力を分割して、要素数を出力 |

## 採点

```bash
php scripts/grade.php topics/array-basic/ch06-string-to-array/drill/01-explode-comma/
```

## 関連チャプター

- [`ch05-for-array`](../ch05-for-array/) — 分割した配列を for で処理する
- [`ch07-array-to-string`](../ch07-array-to-string/) — 逆方向 (配列 → 文字列) の `implode`
- [`ch04-array-functions`](../ch04-array-functions/) — 分割後の `count` / `array_sum`

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 4 / Chapter 6
  目的: explode($sep, $s) で 1 つの文字列を区切り文字で配列に分解できる。CSV / クエリ / タグ入力など現実のデータを取り扱う準備
  扱わない: 正規表現分割 (preg_split) / 配列→文字列 (ch07 implode) / 多次元 (ch08 以降)
  読み上げ時間目安: 4 分
-->

# 文字列を配列に分割する

Lesson 4 / Chapter 6

---

## なぜ分割が要るのか

```
CSV の 1 行:        "apple,banana,cherry"
URL のクエリ:        "name=alice&age=30"
ユーザー入力タグ:    "php css js"
```

現実のデータは **1 本の文字列** で渡ってくることが多い。

ループで処理するには、まず配列に分けてから扱う。

---

## `explode($sep, $s)` の基本

```php
<?php
$csv = "apple,banana,cherry";
$arr = explode(",", $csv);

print_r($arr);
```

実行結果:

```
Array
(
    [0] => apple
    [1] => banana
    [2] => cherry
)
```

- `explode($sep, $s)` = 「`$s` を `$sep` で区切って配列にする」
- 区切り文字 `,` は結果に含まれない

---

## 区切り文字は自由に選べる

```php
<?php
// スペース区切り
$tags = explode(" ", "php css js");
// → ["php", "css", "js"]

// 複数文字の区切り
$path = explode(" -> ", "home -> products -> php");
// → ["home", "products", "php"]
```

- 半角スペース / タブ / `,` / `-` / `:` など何でも OK
- 矢印 ` -> ` のような **複数文字** も区切り文字にできる

---

## 分割した配列を for で処理する

```php
<?php
$csv = "apple,banana,cherry";
$arr = explode(",", $csv);

for ($i = 0; $i < count($arr); $i++) {
    echo ($i + 1) . ". " . $arr[$i] . "\n";
}
```

実行結果:

```
1. apple
2. banana
3. cherry
```

- 分割 → ループ で「文字列処理 + 配列処理」が地続きになる

---

## 第 3 引数で分割数を制限

```php
<?php
// 最初のカンマでだけ分割 (= 2 要素に切る)
$line = "name,alice,30,tokyo";
$parts = explode(",", $line, 2);
// → ["name", "alice,30,tokyo"]
```

- `explode($sep, $s, $limit)` の `$limit` で **分割数の上限** を指定
- 「`:` の最初までを key にしたい」など、 1 つだけ切り出したいときに便利

---

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

✅ `explode($sep, $s)` で文字列を区切り文字で分割できる
✅ カンマ・スペース・複数文字の区切りに対応できる
✅ 分割した配列を `for` で走査できる
✅ `limit` で分割数を制御できる

→ ドリルへ
