map — 各要素を変換する

collection
  • カテゴリ: collection
  • 掲載バージョン: Laravel 12・PHP 8.4
  • 名前空間 / FQCN: Illuminate\Support\Collection::map
  • 関連: transform / flatMap / each / filter
  • 変更履歴: 旧来より存在。非破壊メソッドとして一貫。

要点(TL;DR)

  • 要素ごとにコールバックを適用し、新しいコレクションを返す
  • $collection->map(fn ($v) => $v * 2)
  • 罠: 元のコレクションは変更されないキーは保持される

概要

map はコレクション内の全要素に対してコールバックを実行し、処理結果を集めた新しいコレクションを返します。
非破壊的でチェーン利用に向き、データ変換やDTO生成に多用されます。キーはそのまま維持されます。

構文 / シグネチャ

public function map(callable $callback): static
  • 引数
引数必須既定値説明
$callbackcallable各要素を受け取り、新しい値を返すクロージャ。引数は (mixed $value, mixed $key)
  • 戻り値: Collection — 変換後のコレクション
  • 例外/副作用: 特になし(遅延評価ではなく即実行)

使用例

最小例

use Illuminate\Support\Collection;

$numbers = collect([1, 2, 3]);

$doubled = $numbers->map(fn ($n) => $n * 2);

print_r($doubled->all());
// [2, 4, 6]

実務例

use Illuminate\Support\Collection;

$users = collect([
    ['id' => 1, 'name' => 'Taro'],
    ['id' => 2, 'name' => 'Hanako'],
]);

$dtos = $users->map(fn ($u) => new App\Data\UserDto($u['id'], $u['name']));

foreach ($dtos as $dto) {
    echo $dto->id.': '.$dto->name.PHP_EOL;
}

よくある落とし穴・注意

  • 元コレクションは変わらない → 更新したいなら transform を使う
  • キーは保持される → 再採番したいなら values() を併用
  • ネスト変換が必要なら flatMap を検討

代替・関連APIとの比較

  • map: 非破壊、キー保持
  • transform: 破壊的、キー保持
  • flatMap: ネスト配列をフラット化しつつ変換
  • each: 値を返さず副作用実行のみ

テスト例(Pest)

it('doubles each number', function () {
    $numbers = collect([1, 2, 3]);

    $result = $numbers->map(fn ($n) => $n * 2);

    expect($result->all())->toBe([2, 4, 6]);
});

トラブルシュート(エラー別)

症状/エラー原因対処
値が更新されないmap は非破壊transform を使用する
インデックスが飛び飛びキー保持仕様values() でリセット
ネスト配列が残るmap は平坦化しないflatMap を使用

参考リンク

長野県・北アルプス地方在住のフリーランスWebプログラマー。
「落ち着くためのWeb開発」をテーマに、訪れる人が安心して使えるサービスづくりを心がけています。

LaravelやWordPressなどのWebアプリケーション開発を得意とし、技術面の安定性はもちろん、運用後も長く活用できる設計を大切にしています。
静かな山間の暮らしから生まれる視点で、シンプルかつ本質的な解決策をご提案します。

野鳥観察も趣味のひとつで、特にミソサザイ(Wren)に魅力を感じています。
小さな体に反して力強く上向きの尾羽、そして澄んだ鳴き声が遠くまで響く姿に、静かな存在感と芯の強さを感じます。
このサイト名「Laravel Wren」には、そんなミソサザイのように、小さくても確かな価値を届けたいという想いを込めています。

信頼できるパートナーとして、そして気軽に相談できる存在として、あなたのWebプロジェクトをサポートします。

Yudai Tsuyuzakiをフォローする