この記事の最終更新日: 2025年5月6日
PHP 8 では、関数型プログラミングの考え方を取り入れることで、配列操作をより簡潔かつ効率的に行うことができます。
本記事では、array_map
、array_filter
、array_reduce
の基本的な使い方から、アロー関数や無名関数を用いた実践的な例までを解説します。

1. array_map — 配列の各要素に関数を適用
array_map
は、配列の各要素に指定した関数を適用し、新しい配列を生成します。
使用例:各要素を2倍にする
<?php
$numbers = [1, 2, 3, 4, 5];
// アロー関数を使用
$doubled = array_map(fn($n) => $n * 2, $numbers);
print_r($doubled);
// 出力: [2, 4, 6, 8, 10]
?>
このように、array_map
を使うことで、ループを使わずに配列の各要素を変換できます。
2. array_filter — 条件に合う要素を抽出
array_filter
は、配列の各要素に対して指定した関数を適用し、条件を満たす要素だけを含む新しい配列を返します。
使用例:偶数の要素を抽出
<?php
$numbers = [1, 2, 3, 4, 5];
// 無名関数を使用
$even = array_filter($numbers, function($n) {
return $n % 2 === 0;
});
print_r($even);
// 出力: [2, 4]
?>
このように、array_filter
を使うことで、特定の条件を満たす要素だけを簡潔に抽出できます。
3. array_reduce — 配列を単一の値に集約
array_reduce
は、配列の各要素を指定した関数で処理し、単一の値に集約します。
使用例:要素の合計を計算
<?php
$numbers = [1, 2, 3, 4, 5];
// 無名関数を使用
$sum = array_reduce($numbers, function($carry, $n) {
return $carry + $n;
}, 0);
echo $sum;
// 出力: 15
?>
このように、array_reduce
を使うことで、配列の要素を集約して単一の値を得ることができます。
4. アロー関数と無名関数の使い分け
PHP 7.4 以降では、アロー関数(fn($x) => $x * 2
)を使って、より簡潔に関数を記述できます。
ただし、複数行の処理や変数のスコープが必要な場合は、従来の無名関数(function($x) { ... }
)を使用する方が適しています。
5. 関数の組み合わせによる処理の流れ
これらの関数を組み合わせることで、複雑な配列操作も簡潔に記述できます。
使用例:数値の配列を2倍にし、偶数のみを抽出し、合計を計算
<?php
$numbers = [1, 2, 3, 4, 5];
// 2倍にする
$doubled = array_map(fn($n) => $n * 2, $numbers);
// 偶数のみ抽出
$even = array_filter($doubled, fn($n) => $n % 2 === 0);
// 合計を計算
$sum = array_reduce($even, fn($carry, $n) => $carry + $n, 0);
echo $sum;
// 出力: 30
?>
このように、array_map
、array_filter
、array_reduce
を組み合わせることで、データの変換、フィルタリング、集約を効率的に行うことができます。
まとめ
PHP 8 では、array_map
、array_filter
、array_reduce
を活用することで、配列操作をより簡潔かつ効率的に行うことができます。
アロー関数や無名関数を適切に使い分けることで、コードの可読性と保守性を高めることができます。
これらの関数を活用して、スマートな配列操作を実現しましょう。

大阪のエンジニアが書いているブログ。
コメント