首页 > PHP > Laravel教程 集合

Laravel教程 集合

2025-02-26 13:37:57

一、集合是什么?

Laravel 集合(Collection)是一个封装了数组操作的高级数据结构,继承自 PHP 的ArrayObject,提供了 100 + 个便捷方法来处理数据。集合的核心特点:
  • 面向对象接口:通过方法链式调用实现数据操作
  • 数据不可变性:大多数操作会返回新集合(除非显式修改)
  • 与数组兼容:支持数组语法(如$collection[0])和集合方法混用

二、为什么选择集合而非数组?

场景 数组实现 集合实现
过滤数据 foreach + if $coll->filter(...)
转换数据 array_map $coll->map(...)
分组统计 多层循环 + 条件判断 $coll->groupBy('category')->count()
数据库查询结果处理 遍历数组操作 DB::table()->get()->map(...)
链式操作 需分步操作 ->where()->sortBy()->pluck()

 

核心优势
  1. 代码可读性提升:方法名直观(如containsavg
  2. 减少样板代码:内置常用操作,避免重复造轮子
  3. 与 Eloquent 集成:数据库查询默认返回集合
  4. 更好的 IDE 支持:方法提示和类型约束

 


三、常用方法详解

1. 创建集合

// 基础创建
collect([1,2,3]);

// 数据库创建
DB::table('users')->get(); // 返回Eloquent集合

2. 数据访问

$coll->first(); // 第一个元素
$coll->last();  // 最后一个元素
$coll->get(2);  // 索引访问
$coll->keys();  // 获取所有键名

3. 过滤筛选

// 条件过滤
$coll->where('age', '>', 18);

// 保留符合条件的元素
$coll->filter(fn($item) => $item->active);

// 排除特定元素
$coll->reject(fn($item) => $item->trashed);

4. 数据转换

// 值转换
$coll->map(fn($user) => $user->email);

// 提取字段
$coll->pluck('name', 'id'); // 转为关联数组

// 合并集合
$coll->merge($anotherColl);

5. 排序与分组

// 自然排序
$coll->sort();

// 自定义排序
$coll->sortByDesc('created_at');

// 分组统计
$coll->groupBy('status')->each(fn($group) => count($group));

6. 聚合运算

$coll->sum('price');       // 总和
$coll->avg('rating');      // 平均值
$coll->max('age');         // 最大值
$coll->min('height');      // 最小值

7. 特殊操作

// 去重
$coll->unique('email');

// 交集与差集
$coll->intersect($anotherColl);
$coll->diff($anotherColl);

// 随机抽样
$coll->random(3); // 随机取3个元素

 


四、典型应用场景

  1. 数据库结果处理
 
User::where('active', true)
    ->get()
    ->map(fn($user) => $user->name)
    ->implode(', ');

 

  1. 复杂数据转换
 
$orders->groupBy('user_id')
    ->map(fn($group) => [
        'user' => $group->first()->user,
        'total' => $group->sum('amount')
    ]);

 

  1. 数据验证过滤
 
$validData = $request->validated()
    ->only('email', 'name')
    ->filter();

 


五、性能注意事项

  1. 延迟加载:使用lazy()方法处理大数据集
  2. 方法选择:优先使用where()而非filter()进行精确匹配
  3. 内存管理:处理超大数据时建议使用chunk()分块处理
集合是 Laravel 生态的核心组件,掌握其使用可以显著提升数据处理效率和代码可维护性。建议通过官方文档深入学习更多高级方法。
使用 Ctrl+D 可将网站添加到书签
收藏网站
扫描二维码
关注早实习微信公众号
官方公众号
Top