array_map() / array_filter()
| 対応: | PHP 4(2000) |
|---|
配列の各要素にコールバック関数を適用して変換したり、条件に基づいて要素を抽出する関数です。
構文
// 配列の各要素にコールバック関数を適用して新しい配列を返します。 array_map(コールバック関数, 配列1, 配列2, ...); // 配列の各要素をコールバック関数で評価し、条件を満たす要素だけの配列を返します。 array_filter(配列, コールバック関数, フラグ);
関数一覧
| 関数 | 概要 |
|---|---|
| array_map($callback, $array, ...) | 配列の各要素にコールバック関数を適用し、その戻り値で構成された新しい配列を返します。元の配列は変更されません。 |
| array_filter($array, $callback, $flag) | コールバック関数が『true』を返した要素だけを含む配列を返します。コールバック関数を省略すると、空の値を除外します。 |
サンプルコード
sample_array_map.php
<?php
// 各要素を2倍にした新しい配列を作成します。
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map(fn($n) => $n * 2, $numbers);
print_r($doubled); // 『2, 4, 6, 8, 10』の配列になります。
// 文字列の配列をすべて大文字に変換します。
$words = ['hello', 'world', 'php'];
$upper = array_map('strtoupper', $words);
print_r($upper); // 『HELLO, WORLD, PHP』になります。
// 連想配列の値を加工します(スカイファイナンスの貸付残高を利息込みで計算)。
$loans = ['桐生一馬' => 1000000, '真島吾朗' => 500000, '冴島大河' => 750000];
$with_interest = array_map(fn($amount) => (int)($amount * 1.05), $loans);
print_r($with_interest); // 各金額に5%の利息を加算した値になります。
// 偶数だけを抽出します。
$nums = [1, 2, 3, 4, 5, 6, 7, 8];
$evens = array_filter($nums, fn($n) => $n % 2 === 0);
print_r($evens); // 偶数の『2, 4, 6, 8』だけが残ります。
// 空の値を除外します。コールバックを省略すると自動で除外されます。
$data = ['桐生一馬', '', '真島吾朗', null, '秋山駿', 0, false];
$clean = array_filter($data);
print_r($clean); // 空の値がすべて除外されます。
// 連想配列から条件に合う要素を抽出します(出勤日数が5日以上のメンバー)。
$attendance = ['桐生一馬' => 8, '真島吾朗' => 0, '秋山駿' => 7, '錦山彰' => 0];
$active = array_filter($attendance, fn($days) => $days > 0);
print_r($active); // 出勤しているメンバーだけが残ります。
php array_map.php
Array
(
[0] => 2
[1] => 4
[2] => 6
[3] => 8
[4] => 10
)
Array
(
[0] => HELLO
[1] => WORLD
[2] => PHP
)
Array
(
[桐生一馬] => 1050000
[真島吾朗] => 525000
[冴島大河] => 787500
)
Array
(
[1] => 2
[3] => 4
[5] => 6
[7] => 8
)
Array
(
[0] => 桐生一馬
[2] => 真島吾朗
[4] => 秋山駿
)
Array
(
[桐生一馬] => 8
[秋山駿] => 7
)
概要
『array_map()』は配列の各要素を変換して新しい配列を作成する関数です。コールバック関数には関数名の文字列、無名関数、アロー関数のいずれも指定できます。複数の配列を渡すと、各配列の同じインデックスの要素がコールバック関数の引数として渡されます。
『array_filter()』は条件を満たす要素だけを抽出する関数です。コールバック関数を省略すると、『false』『null』『空文字列』『0』などの空の値をすべて除外します。ただし『0』も除外されるため、数値の0を残したい場合はコールバック関数で明示的に条件を指定してください。
『array_filter()』の結果はキーが保持されるため、キーが飛び飛びになることがあります。連番のキーが必要な場合は『array_values()』で振り直してください。配列の集約処理については『array_reduce()』を参照してください。
記事の間違いや著作権の侵害等ございましたらお手数ですがこちらまでご連絡頂ければ幸いです。