PHP array_map で配列を変換する
array_map() は、配列の各要素にコールバック関数を適用し、新しい配列を返す関数です。元の配列は変更されません。JavaScript の map() メソッドと同じ発想ですが、PHP では引数の順序が異なります。
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map(function ($n) {
return $n * 2;
}, $numbers);
print_r($doubled);
// [2, 4, 6, 8, 10]第 1 引数がコールバック関数、第 2 引数以降が対象の配列です。
アロー関数を使う
PHP 7.4 以降はアロー関数を使って簡潔に書けます。fn キーワードを使い、return を省略できます。
$numbers = [1, 2, 3, 4, 5];
$doubled = array_map(fn($n) => $n * 2, $numbers);1 行で済む処理ならアロー関数の方が読みやすいでしょう。
複数の配列を同時に処理
array_map() は複数の配列を同時に処理できます。各配列の同じインデックスの要素がコールバックに渡されます。
$names = ['Alice', 'Bob', 'Charlie'];
$ages = [25, 30, 35];
$users = array_map(function ($name, $age) {
return ['name' => $name, 'age' => $age];
}, $names, $ages);
print_r($users);
// [
// ['name' => 'Alice', 'age' => 25],
// ['name' => 'Bob', 'age' => 30],
// ['name' => 'Charlie', 'age' => 35]
// ]連想配列のキーは保持されない
array_map() は連想配列のキーを保持しますが、コールバックにはキーが渡されません。キーも使いたい場合は array_keys() と組み合わせるか、foreach を使う方がシンプルです。
$prices = ['apple' => 100, 'banana' => 80];
// キーを使いたい場合
$result = [];
foreach ($prices as $name => $price) {
$result[$name] = "$name: {$price}円";
}