ch06 6章中 6章目

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

スライドで見る

この章を AI と学ぶ

💬 AI に聞く質問例 3 件
  1. 「ch06 — 配列を引数に取る / 配列を返す」のつまずきやすいポイントを、初学者向けに3つ教えてください

    ChatGPT Claude Gemini

  2. 「ch06 — 配列を引数に取る / 配列を返す」について、自分の手で試せる練習問題を3つ出してください (難易度を上げながら)

    ChatGPT Claude Gemini

  3. 「ch06 — 配列を引数に取る / 配列を返す」を学んだ後、次に学ぶと良いトピックは何ですか?理由も教えてください

    ChatGPT Claude Gemini

概要

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

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

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

学習目標

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

ドリル

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

解説スライド 全 6 枚

右の ボタン キー(またはスワイプ)で次のスライドに進めます。 下の「縦表示」を開くと全スライドを一気に読めます。

  1. 配列を引数に取る / 返す

    Lesson 7 / Chapter 6

  2. 配列も引数として渡せる

    <?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 などで普通に使える
  3. 型宣言で array と書ける

    <?php
    function total(array $arr): int {
        $sum = 0;
        foreach ($arr as $v) {
            $sum += $v;
        }
        return $sum;
    }
    • array $arr で「配列を受け取る」と明示できる
    • 戻り値も : int で型を書ける
    • 引数に配列以外を渡そうとするとエラーになる
  4. 配列を加工して return できる

    <?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 する
    • 元の配列は変えない (副作用なし)
  5. 条件で絞り込んで返すこともできる

    <?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[] に追加
    • 「絞り込む」「変換する」「合計する」など、よく使うパターン
  6. このチャプターでできるようになること

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

    → ドリルへ

1 / 6
📜 スライドを全部一気に読む(縦表示)

Lesson 7 / Chapter 6


配列も引数として渡せる

<?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
function total(array $arr): int {
    $sum = 0;
    foreach ($arr as $v) {
        $sum += $v;
    }
    return $sum;
}
  • array $arr で「配列を受け取る」と明示できる
  • 戻り値も : int で型を書ける
  • 引数に配列以外を渡そうとするとエラーになる

配列を加工して return できる

<?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
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 で返せる

→ ドリルへ

この章で取り組む 演習問題の流れ (3ステップ)
  1. 01 ドリル 01 — total(array $arr): int で合計を返す README.md starter.php answer.php
  2. 02 ドリル 02 — 配列の各要素を 2 倍にして返す README.md starter.php answer.php
  3. 03 ドリル 03 — 配列から正の数だけ抽出する README.md starter.php answer.php

演習問題の詳細

この章の演習問題の内容を読めます。実際に手元で解くには教材リポジトリを clone してください。

ドリル 01 — total(array $arr): int で合計を返す

問題

配列 $arr を引数に取り、要素の合計を return で返す関数 total を、型宣言付きで定義してください。

  • 引数 $arr の型は array
  • 戻り値の型は int

定義した後、次の 3 件の戻り値を 1 行ずつ出力してください。

  1. total([1, 2, 3, 4, 5])
  2. total([10, 20, 30])
  3. total([7])

期待される出力:

15
60
7

ヒント

  • function total(array $arr): int { ... }
  • 中で $sum = 0; を用意し foreach ($arr as $v) { $sum += $v; }
  • 最後に return $sum;

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 02 — 配列の各要素を 2 倍にして返す

問題

配列 $arr を引数に取り、各要素を 2 倍にした 新しい配列return で返す関数 doubled を定義してください。

  • 引数 $arr の型は array
  • 戻り値の型は array

定義した後、doubled([1, 2, 3, 4, 5]) の戻り値を 1 要素 1 行で出力してください。

期待される出力:

2
4
6
8
10

ヒント

  • function doubled(array $arr): array { ... }
  • 中で $result = []; を用意し foreach ($arr as $v) { $result[] = $v * 2; }
  • 最後に return $result;
  • 呼び出し側で foreach (doubled([1, 2, 3, 4, 5]) as $v) { echo $v . "\n"; }

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

ドリル 03 — 配列から正の数だけ抽出する

問題

配列 $arr を引数に取り、0 より大きい要素だけを集めた 新しい配列return で返す関数 positives を定義してください。

  • 引数 $arr の型は array
  • 戻り値の型は array
  • 0 は正の数に 含めない (> 0 で判定)

定義した後、positives([-3, -1, 0, 2, -5, 4, 7]) の戻り値を 1 要素 1 行で出力してください。

期待される出力:

2
4
7

ヒント

  • function positives(array $arr): array { ... }
  • 中で $result = []; を用意し foreach ($arr as $v) { if ($v > 0) { $result[] = $v; } }
  • 最後に return $result;
  • 呼び出し側で foreach (positives([...]) as $v) { echo $v . "\n"; }

🧪 ブラウザで試す

スライドのコードを写経して ▶ 実行、自分で書いて 📝 採点 で答え合わせ。初回のみ PHP ランタイム読込で数秒かかります。

PHP ランタイム未読込

          

        

演習問題(3問)

  1. ドリル 01 — total(array $arr): int で合計を返す

    README.md starter.php answer.php

  2. ドリル 02 — 配列の各要素を 2 倍にして返す

    README.md starter.php answer.php

  3. ドリル 03 — 配列から正の数だけ抽出する

    README.md starter.php answer.php

サイト内で問題文・雛形・解答例を確認できます。実際に手元で解くには教材リポジトリを clone してください。

完了にすると進捗に反映されます