配列を引数に取る / 返す
テクノロジ系 / 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 行ずつ出力してください。
total([1, 2, 3, 4, 5])total([10, 20, 30])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"; }