Laravel `transform`、`map`、`each`、`tap`方法对比说明

Laravel Collection 方法对比说明

本文对 Laravel 中集合常用操作方法 transformmapeachtap 进行详细说明和对比,包括使用场景、返回值以及代码示例。


🌀 transform()

  • 作用:对集合中的每一项进行处理,并修改原集合本身
  • 返回值:修改后的原集合(引用保留)。
  • 适用场景:需要直接修改集合内每一项内容,不需要新集合。
$collection = collect([['name' => 'Tom'], ['name' => 'Jerry']]);

$collection->transform(function ($item) {
    $item['name'] = strtoupper($item['name']);
    return $item;
});

// $collection 现在是 [['name' => 'TOM'], ['name' => 'JERRY']]

🔁 map()

  • 作用:对集合中的每一项进行处理,并返回一个新的集合
  • 返回值:一个全新的集合。
  • 适用场景:需要保留原集合不变的前提下进行转换操作。
$collection = collect([['name' => 'Tom'], ['name' => 'Jerry']]);

$uppercased = $collection->map(function ($item) {
    return ['name' => strtoupper($item['name'])];
});

// $uppercased 是新的集合,原 $collection 不变

👣 each()

  • 作用:遍历集合,对每一项执行某些操作,但不改变集合本身
  • 返回值:原集合。
  • 适用场景:用于副作用,比如日志、输出、数据库操作。
$collection = collect(['Tom', 'Jerry']);

$collection->each(function ($item) {
    echo $item . PHP_EOL;
});

// 输出:Tom
Jerry


🪞 tap()

  • 作用:用于链式调用中,允许在中间插入一个操作块,但不影响返回值
  • 返回值:原对象本身(未修改)。
  • 适用场景:调试、日志记录、链式结构中的中间处理。
$collection = collect(['Tom', 'Jerry'])
    ->tap(function ($col) {
        Log::info('当前集合:', $col->toArray());
    })
    ->map(function ($item) {
        return strtoupper($item);
    });

✅ 总结对比表

方法 是否返回新集合 是否修改原集合 是否用于数据转换 是否用于副作用
transform
map
each
tap ✅(链式中)

📌 小技巧

  • 推荐:transform() 适合数据“加工”;each() 适合副作用;tap() 用于链式中的“调试点”;map() 适合函数式风格的数据处理。

来源: 内容使用AI对比获得

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容