【PHP8対応】array_map・filter・reduceを使ったスマートな配列操作入門

array_map filter reduce PHP
この記事は約4分で読めます。

この記事の最終更新日: 2025年5月6日

PHP 8 では、関数型プログラミングの考え方を取り入れることで、配列操作をより簡潔かつ効率的に行うことができます。

本記事では、array_maparray_filterarray_reduce の基本的な使い方から、アロー関数や無名関数を用いた実践的な例までを解説します。

array_map filter 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_maparray_filterarray_reduce を組み合わせることで、データの変換、フィルタリング、集約を効率的に行うことができます。


まとめ

PHP 8 では、array_maparray_filterarray_reduce を活用することで、配列操作をより簡潔かつ効率的に行うことができます。

アロー関数や無名関数を適切に使い分けることで、コードの可読性と保守性を高めることができます。

これらの関数を活用して、スマートな配列操作を実現しましょう。

クリックしたら、
楽天モバイル大盤振る舞いのキャンペーン中らしいです (本ブログ管理人は楽天モバイル2台持ちです) 楽天モバイル
PHP
daigoroをフォローする

コメント

タイトルとURLをコピーしました