# ch06 — 配列を引数に取る / 配列を返す

Source: https://php-school.pages.dev/topics/function/ch06-array-arg/
Site: AIと学ぶPHPの学校 (https://php-school.pages.dev)
Lesson: 関数
Level: L2

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

## 本文

# ch06 — 配列を引数に取る / 配列を返す

## 概要

関数は配列も自由に受け取れるし、配列を戻り値として返すこともできる。`function total(array $arr): int { ... }` のように `array` 型を付けて宣言すれば、複数の値をひとまとめにして渡せるようになり、合計・平均・抽出・変換のような「コレクションに対するひとかたまりの処理」を関数として独立させられる。引数が 1 個でも中身は 100 件あって構わないので、「いくつ並んでもいい」性質を持つ入力には配列引数が向いている。

PHP では配列を関数に渡しても **値渡し** で挙動するのが基本だ (オブジェクトと違って関数内の変更が外に伝わらない)。配列の各要素を 2 倍にするような変換系の関数は、新しい配列を作って `return` で返すパターンで書く。これは小さなパイプラインの土台になり、「フィルタ → 変換 → 集計」のような流れを 3 つの関数の組み合わせで表現できるようになる。

このチャプターはあくまで「自分で書く」ことを目的にしているが、PHP には同じ用途で使える `array_sum` / `array_map` / `array_filter` といった組み込み関数も豊富にある。まず手書きで合計・倍化・抽出を書いて動きを掴んでから、後の章で組み込み関数に置き換える流れを意識しておくと、「自前で書ける」と「ライブラリで一発」の両方を選べる引き出しが揃う。

## 学習目標

- 配列を引数として関数に渡せる
- `array` 型を付けて宣言できる
- 関数の中で配列を変換して `return` で返せる

## 所要時間

スライド 4 分 + ドリル 3 問 = **18 分**

## ドリル

| no | 内容 |
|---|---|
| 01 | `total(array $arr): int` で合計を返す |
| 02 | 配列の各要素を 2 倍にして返す |
| 03 | 配列から正の数だけ抽出して返す |

## 採点

```bash
php scripts/grade.php topics/function/ch06-array-arg/drill/01-total/
```

## 関連チャプター

- [`ch03-return`](../ch03-return/) — `return` で値を返す (前提)
- [`ch05-type-hints`](../ch05-type-hints/) — 型宣言
- [`../../08-class/ch01-class-def`](../../08-class/ch01-class-def/) — 配列の代わりにクラスでまとめる発想 (次トピック)

## スライド

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

<!--
LLM_CONTEXT:
  Lesson 7 / Chapter 6
  目的: 関数の引数に配列を渡し、関数の中で配列を加工して return できるようにする
  扱わない: クラス (L8) / 連想配列を返す具体的なパターン / 参照渡し
  読み上げ時間目安: 3 分半〜4 分
-->

# 配列を引数に取る / 返す

Lesson 7 / Chapter 6

---

## 配列も引数として渡せる

```php
<?php
function total($arr) {
    $sum = 0;
    foreach ($arr as $v) {
        $sum += $v;
    }
    return $sum;
}

$nums = [1, 2, 3, 4, 5];
echo total($nums) . "\n"; // 15
```

- 引数に配列をそのまま渡せる
- 関数の中では `foreach` などで普通に使える

---

## 型宣言で `array` と書ける

```php
<?php
function total(array $arr): int {
    $sum = 0;
    foreach ($arr as $v) {
        $sum += $v;
    }
    return $sum;
}
```

- `array $arr` で「配列を受け取る」と明示できる
- 戻り値も `: int` で型を書ける
- 引数に配列以外を渡そうとするとエラーになる

---

## 配列を加工して `return` できる

```php
<?php
function doubled(array $arr): array {
    $result = [];
    foreach ($arr as $v) {
        $result[] = $v * 2;
    }
    return $result;
}

print_r(doubled([1, 2, 3]));
```

実行結果:

```
Array
(
    [0] => 2
    [1] => 4
    [2] => 6
)
```

- 新しい配列を作って `return` する
- 元の配列は変えない (副作用なし)

---

## 条件で絞り込んで返すこともできる

```php
<?php
function positives(array $arr): array {
    $result = [];
    foreach ($arr as $v) {
        if ($v > 0) {
            $result[] = $v;
        }
    }
    return $result;
}

print_r(positives([-1, 2, -3, 4]));
// [2, 4]
```

- `foreach` で 1 件ずつ見て、条件に合うものだけ `$result[]` に追加
- 「絞り込む」「変換する」「合計する」など、よく使うパターン

---

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

✅ 配列を関数の引数として渡せる
✅ `array $arr` の型宣言が書ける
✅ 関数の中で配列を加工できる
✅ 加工した配列を `return` で返せる

→ ドリルへ
