laravel集合提供链式调用方法高效处理数据。1. 使用Filter和where筛选数据,如大于指定值或匹配键值;2. 通过map转换元素,pluck提取字段并支持去重;3. 利用sum、avg计算数值,contains判断存在性,isEmpty检查空集合;4. groupBy按条件分组,chunk分块处理,collapse合并嵌套数组。掌握这些方法可提升数据操作效率与代码可读性。
在 Laravel 中,集合(Collections)是处理数组数据的强大工具。它基于 IlluminateSupportCollection 类,提供了丰富的方法来操作和遍历数据。无论是从数据库查询返回的结果,还是手动创建的数据集,都可以使用集合提供的链式调用方式高效处理。
1. 数据筛选:filter 和 where
filter() 方法允许你通过回调函数自定义筛选条件。
例如:
- $collection = collect([1, 2, 3, 4, 5]);
- $filtered = $collection->filter(fn($value) => $value > 3); // 结果:[4, 5]
比如:
- $users = collect([
- [‘name’ => ‘Alice’, ‘age’ => 25],
- [‘name’ => ‘Bob’, ‘age’ => 30]
- ]);
- $adults = $users->where(‘age’, ‘>’, 25); // 匹配年龄大于25的用户
2. 数据映射与转换:map 和 pluck
map() 对集合中的每个元素执行操作并返回新集合。
- $numbers = collect([1, 2, 3]);
- $doubled = $numbers->map(fn($n) => $n * 2); // [2, 4, 6]
pluck() 用于提取指定字段的值,常用于获取模型中的某些属性。
- $names = $users->pluck(‘name’); // [‘Alice’, ‘Bob’]
支持嵌套键和唯一去重:
- $data->pluck(‘user.name’)->unique();
3. 聚合与判断:sum、avg、contains、isEmpty
快速计算数值总和或平均值:
- $prices = collect([100, 200, 300]);
- $total = $prices->sum(); // 600
- $average = $prices->avg(); // 200
检查是否存在某个值或满足条件:
- $hasAdult = $users->contains(‘age’, ‘>’, 18); // true
- $isEmpty = $collection->isEmpty(); // 判断是否为空
4. 集合分割与重组:groupBy、chunk、collapse
groupBy() 按字段或回调分组。
- $grouped = $users->groupBy(‘age’);
chunk() 将集合拆分为多个小块,适合分页或批量处理。
- $chunks = collect([1,2,3,4,5])->chunk(2); // 每组2个
collapse() 将多个数组合并成一个扁平集合。
- $nested = collect([[1,2], [3,4]]);
- $flat = $nested->collapse(); // [1,2,3,4]
基本上就这些。Laravel 集合的设计注重可读性和功能性,掌握这些常用方法后,处理数据会更加流畅自然。