Laravel Collection 方法对比说明
本文对 Laravel 中集合常用操作方法 transform
、map
、each
、tap
进行详细说明和对比,包括使用场景、返回值以及代码示例。
🌀 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对比获得