# ch06 — 各行の合計を出力

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

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

## 本文

# ch06 — 各行の合計を出力

## 概要

2 次元配列の **各行の合計** を求めるのは、「2 次元配列の処理」の最初の本格パターン。各行は 1 次元配列なので、合計の出し方は array-basic トピックで覚えた `array_sum` や `foreach` で `$sum += $value` を組み立てる方法がそのまま使える。外側 foreach で 1 行ずつ取り出して、その行に対して合計を計算 → 出力、というのが基本の流れ。

一番すっきりするのは `foreach ($table as $row) { echo array_sum($row) . "\n"; }` で、**1 行分の合計を `array_sum` に丸投げ** する書き方。`[1,2,3]` の合計 6、`[4,5,6]` の合計 15、`[7,8,9]` の合計 24 が 3 行で出力される。`array_sum` を使わずに内側 foreach で `$sum += $value` を組み立てる書き方も学んでおく。後者は ch07 (列合計) や ch12 (総合演習) で **集計のロジックを自分で書く** 時の土台になる。

最頻出のバグは「**`$sum = 0` のリセットを忘れる**」。外側 foreach の **手前** で `$sum = 0` を書いてしまうと、行が変わってもリセットされず「ここまでの累計」になってしまう (6, 21, 45 のように)。リセットは **外側ループの中・内側ループの直前** に置く、というスコープの感覚をここで身につける。これは後の章の集計処理でずっと使う基本動作。

## 学習目標

- 各行の合計を 1 行ずつ出力できる
- `array_sum` で簡潔に書ける
- 内側 foreach で `$sum` を組み立てる書き方も書ける
- 行ごとにリセットすべき変数の位置 (外側ループの中) が分かる

## 所要時間

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

## ドリル

| no | 内容 |
|---|---|
| 01 | 3×3 配列の各行の合計を 3 行で出力 |

## 採点

```bash
php scripts/grade.php topics/array-multi/ch06-row-sum/drill/01-each-row-sum/
```

## 関連チャプター

- [`ch04-2d-foreach`](../ch04-2d-foreach/) — 入れ子 foreach の構造 (この章の前提)
- [`ch07-col-sum`](../ch07-col-sum/) — 同じ集計を「列ごと」にやる対の章
- [`ch12-summary`](../ch12-summary/) — 行合計を「学生ごとの平均」として総合演習で使う

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 6 / Chapter 6
  目的: 2 次元配列の「各行」の合計を計算・出力できるようにする
  扱わない: 列ごとの合計 (ch07)
  読み上げ時間目安: 3 分半〜4 分
-->

# 各行の合計を出す

Lesson 6 / Chapter 6

---

## 行ごとに合計したい

```php
<?php
$table = [
    [1, 2, 3],   // 行 0 の合計 = 6
    [4, 5, 6],   // 行 1 の合計 = 15
    [7, 8, 9],   // 行 2 の合計 = 24
];
```

- 各行は 1 次元配列なので、合計の出し方は array-basic トピックと同じ
- `array_sum($row)` か、内側 foreach で `$sum += $value`

---

## `array_sum` を使う書き方

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

実行結果:

```
6
15
24
```

- 外側 foreach で行を 1 つずつ取り出す
- `array_sum($row)` で 1 行分の合計を一発で計算

---

## 内側 foreach で組み立てる書き方

```php
<?php
foreach ($table as $row) {
    $sum = 0;
    foreach ($row as $value) {
        $sum += $value;
    }
    echo $sum . "\n";
}
```

- 行が変わるたびに `$sum = 0` でリセット (これ重要)
- 内側で 1 マスずつ足す
- 行が終わったら `echo $sum . "\n";`

---

## `$sum = 0` のリセットを忘れると...

```php
<?php
$sum = 0;   // ← 外側で 1 回しか初期化していない
foreach ($table as $row) {
    foreach ($row as $value) {
        $sum += $value;
    }
    echo $sum . "\n";   // 6, 21, 45 (累計になってしまう)
}
```

- 「各行の合計」のはずが「ここまでの累計」になる
- 行ごとの合計を出すなら、外側ループの **中** で初期化する

---

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

✅ 各行の合計を 1 行ずつ出力できる
✅ `array_sum` で簡潔に書ける
✅ 内側 foreach で `$sum` を組み立てる書き方も書ける
✅ 行ごとにリセットすべき変数の位置が分かる

→ ドリルへ
