採点されません。匿名です。 間違えることは学習の一部です。読むだけでもかまいません。

配列を引数に取る / 返す

テクノロジ系 / function (関数定義・引数・return・型宣言)

配列を引数に取る / 返す

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

→ ドリルへ

考えてみよう

既定では正解・不正解の判定はしません。自分のペースで「答えを見る」を。採点してほしい場合だけ「採点してほしい」を押してください。

ドリル 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

採点

php scripts/grade.php topics/function/ch06-array-arg/drill/01-sum-array/

ヒント

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

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

問題

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

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

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

期待される出力:

2
4
6
8
10

採点

php scripts/grade.php topics/function/ch06-array-arg/drill/02-map-double/

ヒント

  • 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"; }

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

問題

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

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

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

期待される出力:

2
4
7

採点

php scripts/grade.php topics/function/ch06-array-arg/drill/03-filter-positive/

ヒント

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