多次元配列 / ch11 — 入力 CSV を 2 次元配列にする / 演習 02
📝 ドリル 02 — CSV を読んで各列の合計を出力
問題
標準入力で次のような数値 CSV (3 行 3 列) が与えられます。
入力例:
1,2,3
4,5,6
7,8,9
これを 2 次元配列にし、各列の合計 を 1 行ずつ (左の列から順に) 出力してください。
期待される出力:
12
15
18
採点
php scripts/grade.php v2/topics/06-array-multi/ch11-csv-to-2d/drill/02-sum-csv-col/
ヒント
- 1 行ずつ
fgets(STDIN)で読み、explode(",", $line)で分割 - 数値計算するので各要素は
(int)で整数に変換 - 列数を取って外側 for
$j、内側で全行の$row[$j]を加算
テストケース
標準入力
1,2,3
4,5,6
7,8,9
期待される出力
12
15
18
📄 starter.php(雛形)
このコードから書き始めてください。
<?php
// TODO: 標準入力の数値 CSV (3 行 3 列) を 2 次元配列にして、各列の合計を出力する
// ヒント:
// $table = [];
// while (($line = fgets(STDIN)) !== false) {
// $line = rtrim($line, "\n");
// if ($line === "") continue;
// $cols = explode(",", $line);
// $row = [];
// foreach ($cols as $c) {
// $row[] = (int) $c;
// }
// $table[] = $row;
// }
//
// $colCount = count($table[0]);
// for ($j = 0; $j < $colCount; $j++) {
// $sum = 0;
// foreach ($table as $row) {
// $sum += $row[$j];
// }
// echo $sum . "\n";
// }
✅ 解答例を見る(自分で解いてから)
<?php
$table = [];
while (($line = fgets(STDIN)) !== false) {
$line = rtrim($line, "\n");
if ($line === "") continue;
$cols = explode(",", $line);
$row = [];
foreach ($cols as $c) {
$row[] = (int) $c;
}
$table[] = $row;
}
$colCount = count($table[0]);
for ($j = 0; $j < $colCount; $j++) {
$sum = 0;
foreach ($table as $row) {
$sum += $row[$j];
}
echo $sum . "\n";
}