採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

文字列を配列に分割する

テクノロジ系 / array-basic (添字配列・配列関数・explode/implode)

文字列を配列に分割する

Lesson 4 / Chapter 6

なぜ分割が要るのか

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

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

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

explode($sep, $s) の基本

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

print_r($arr);

実行結果:

Array
(
    [0] => apple
    [1] => banana
    [2] => cherry
)
  • explode($sep, $s) = 「$s$sep で区切って配列にする」
  • 区切り文字 , は結果に含まれない

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

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

// 複数文字の区切り
$path = explode(" -> ", "home -> products -> php");
// → ["home", "products", "php"]
  • 半角スペース / タブ / , / - / : など何でも OK
  • 矢印 -> のような 複数文字 も区切り文字にできる

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

<?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
// 最初のカンマでだけ分割 (= 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 で分割数を制御できる

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 02 — スペース区切りの要素数

問題

標準入力から 1 行を読み取り、スペース " " で分割した要素数を 1 行出力してください。

入力例:

3 14 15 92 6 5

期待される出力:

6

採点

php scripts/grade.php topics/array-basic/ch06-string-to-array/drill/02-split-space/

ヒント

  • $line = trim(fgets(STDIN));
  • $parts = explode(" ", $line);
  • echo count($parts) . "\n";