はじめに
PHP の配列操作では、array_filter()
と array_sum()
を組み合わせることで条件付きの合計を求めることができます。試験問題では「偶数だけを抽出して合計する」ようなコードが登場することがありますが、実際の出力を正しく理解できていますか?この記事では、サンプルコードを使いながら挙動を解説します。
キーワード:array_filter / array_sum / 配列操作 / 偶数の合計 / コールバック関数
目次
サンプルコード
<?php
declare(strict_types=1);
error_reporting(-1);
$arr = [1,2,3,4,5,6,7,8,9,10];
$sum = array_sum(
array_filter($arr, function($v){
return ($v % 2) == 0;
})
);
var_dump($sum);
array_filter() の動き
array_filter()
はコールバック関数が true
を返した要素のみを残した配列を返します。
この場合、条件は「偶数かどうか」なので、結果は次のような配列です:
[1 => 2, 3 => 4, 5 => 6, 7 => 8, 9 => 10]
- 元のキー(1, 3, 5, 7, 9)は保持されます
- 値は
2,4,6,8,10
の偶数のみが残ります
array_sum() の動き
次に array_sum()
が実行されます。配列 [2,4,6,8,10]
の合計は:
2 + 4 + 6 + 8 + 10 = 30
誤答と正答の比較表
判定 | 想定した挙動 | 実際の挙動 | 出力結果 |
---|---|---|---|
❌ 誤答パターン | 1〜10の中で「奇数の合計」と勘違い | 偶数がフィルタされているのに気付かない | int(25) |
✅ 正答パターン | 偶数だけをフィルタして合計する | [2,4,6,8,10] の合計を算出 | int(30) |
実行結果
よって、実際の出力は次のようになります:
int(30)
「int(25)」と考えてしまうのは誤りです。
試験対策のポイント
array_filter()
はキーを詰め直さずに返すため、戻り値の配列は「飛び番号」になる場合があります。array_sum()
はキーを無視して値を合計するため、偶数の合計=30 となります。- 配列操作問題では「戻り値の配列の形」と「その後の処理」を切り分けて考えることが重要です。