概要
CSV (Comma-Separated Values) は 実務で最もよく出会うデータ形式 の 1 つ。Excel・Google スプレッドシート・DB のエクスポート・ログ・売上データなど、外部から渡されるデータはほぼこの形になる。CSV を PHP で扱う基本は「1 行ずつ標準入力で受け取り、explode(",", $line) でカンマ区切りに分解し、2 次元配列に組み立てる」というシンプルな流れだ。
組み立ての骨格は $rows = []; for ($i = 0; $i < $n; $i++) { $line = trim(fgets(STDIN)); $rows[] = explode(",", $line); }。1 行読む → カンマで分割 → 2 次元配列に追加 を行数分くり返すだけ。trim で末尾の改行を取り除いてから explode するのがコツで、これを忘れると最後の要素に \n が混ざって数値変換に失敗するなどの しょっぱい事故 が起きる。要素を数値として扱いたいときは (int) などで明示的にキャストする。
2 次元配列に組み上がれば、あとは ch04〜ch07 で扱った 入れ子 foreach / 行合計 / 列合計 の手法がそのまま使える。ドリル 02 では「CSV → 2 次元配列 → 各列の合計」というパイプラインを通して、ばらばらに見えた章の知識が 1 本の処理として繋がる ことを体感する。これが「実務で動く PHP」の入口で、ここまで来れば自分でレポート集計スクリプトが書けるレベルになる。
学習目標
- 標準入力で複数行を受け取り、各行を
explode(",", $line)で分割できる - 分割結果を 2 次元配列に組み立てられる
- 組み立てた 2 次元配列に対して、これまでの章 (合計など) を適用できる
ドリル
| no | 内容 |
|---|---|
| 01 | CSV 入力を 2 行 3 列の配列にして表形式で出力 |
| 02 | CSV 入力を 2 次元配列にして各列の合計を出力 |
📝 演習: ドリル 01 — CSV を 2 次元配列にして表形式で出力
問題
標準入力で次のような CSV (2 行 3 列) が与えられます。
入力例:
a,b,c
1,2,3
これを explode で 2 次元配列に組み立て、各行を 空白区切り で 1 行に出力してください。
期待される出力:
a b c
1 2 3ヒント
while (($line = fgets(STDIN)) !== false) { ... }で 1 行ずつ読むrtrim($line, "\n")で末尾改行を除去$table[] = explode(",", $line);foreach ($table as $row) echo implode(" ", $row) . "\n";
📝 演習: ドリル 02 — CSV を読んで各列の合計を出力
問題
標準入力で次のような数値 CSV (3 行 3 列) が与えられます。
入力例:
1,2,3
4,5,6
7,8,9
これを 2 次元配列にし、各列の合計 を 1 行ずつ (左の列から順に) 出力してください。
期待される出力:
12
15
18ヒント
- 1 行ずつ
fgets(STDIN)で読み、explode(",", $line)で分割 - 数値計算するので各要素は
(int)で整数に変換 - 列数を取って外側 for
$j、内側で全行の$row[$j]を加算