# ch05 — 表形式で整形出力

Source: https://php-school.pages.dev/topics/array-multi/ch05-table-print/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 多次元配列
Level: L2

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

## 本文

# ch05 — 表形式で整形出力

## 概要

2 次元配列を **「表」として読める形** で画面に出すには、入れ子 foreach の中で **「マスは空白区切り、行末で改行」** という出力ルールを守る。`foreach ($table as $row) { foreach ($row as $cell) { echo $cell . " "; } echo "\n"; }` という骨格で、3×3 配列なら 3 行 × 3 列の見やすい出力ができる。

このとき要点は、改行を **どこで出すか**。内側 foreach の中で `echo "\n"` を出すとマスごとに改行して縦 1 列になってしまう。**外側 foreach のループ末尾 (内側 foreach が終わった直後)** で `echo "\n"` を出すことで「1 行分が終わった」を表現する。「内側で空白、外側で改行」と覚えておくと混乱しない。

`implode(" ", $row)` を使うと「1 行分を空白区切りで連結した文字列」を一発で作れる。内側 foreach を消して `foreach ($table as $row) { echo implode(" ", $row) . "\n"; }` と書けば同じ結果になる。実務では `printf("%3d %3d %3d\n", ...)` や `str_pad` で **桁を揃える** バリエーションもよく使うので、空白区切りはあくまで最小形と捉えておく。

## 学習目標

- 内側 foreach の中で値を空白区切りで出力し、行末で改行する書き方を覚える
- 2 次元配列を「表」として読める形に出力できる
- `implode` でも同じことができると知る

## 所要時間

スライド 4 分 + ドリル 1 問 = **10 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | 3×3 配列を空白区切りの表形式で 3 行出力 |

## 採点

```bash
php scripts/grade.php topics/array-multi/ch05-table-print/drill/01-table/
```

## 関連チャプター

- [`ch04-2d-foreach`](../ch04-2d-foreach/) — 入れ子 foreach の構造 (この章の前提)
- [`ch06-row-sum`](../ch06-row-sum/) — 同じ構造で「出力」を「合計」に置き換える次の章
- [`ch11-csv-to-2d`](../ch11-csv-to-2d/) — `implode` の逆操作 `explode` で CSV を分解する

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 6 / Chapter 5
  目的: 2 次元配列を「表」として整形出力できるようにする (行→改行、列→空白区切り)
  扱わない: 行・列の合計 (ch06, ch07)
  読み上げ時間目安: 3 分半〜4 分
-->

# 表形式で整形出力

Lesson 6 / Chapter 5

---

## 行 = 改行、列 = 空白区切り

```php
<?php
$table = [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9],
];
foreach ($table as $row) {
    foreach ($row as $value) {
        echo $value . " ";
    }
    echo "\n";
}
```

実行結果:

```
1 2 3
4 5 6
7 8 9
```

- 内側で空白付きで出力
- 内側を抜けた直後に `echo "\n";`

---

## 末尾の空白が気になるなら `implode`

```php
<?php
foreach ($table as $row) {
    echo implode(" ", $row) . "\n";
}
```

実行結果:

```
1 2 3
4 5 6
7 8 9
```

- `implode(区切り文字, 配列)` で「区切り文字で連結した文字列」を作る
- 配列の **間** に区切り文字が入るので、末尾には空白が付かない
- 1 行が短く書ける

---

## カンマ区切り (CSV 風) にもできる

```php
<?php
foreach ($table as $row) {
    echo implode(",", $row) . "\n";
}
```

実行結果:

```
1,2,3
4,5,6
7,8,9
```

- 区切り文字を変えるだけで形が変わる
- `","` にすれば CSV 風、`"\t"` にすればタブ区切り

---

## 行頭・行末を装飾したい場合

```php
<?php
foreach ($table as $row) {
    echo "| " . implode(" | ", $row) . " |\n";
}
```

実行結果:

```
| 1 | 2 | 3 |
| 4 | 5 | 6 |
| 7 | 8 | 9 |
```

- 行頭・行末に固定文字を足せばパイプ表もすぐ書ける
- 整形出力は「1 行ずつ作る」と覚える

---

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

✅ 内側 foreach + 末尾改行で表を出力できる
✅ `implode` で 1 行を空白・カンマ区切り文字列にできる
✅ 区切り文字を変えれば CSV / TSV にできる
✅ 行頭・行末に文字を足してパイプ表にできる

→ ドリルへ
