Laravel集合Collection怎么用_Laravel集合常用函数详解

发布时间 - 2025-12-09 00:00:00    点击率:
Laravel集合基于Illuminate\Support\Collection类,通过collect()创建,提供map、filter、reduce等链式方法处理数据,相比原生数组更优雅高效,常用于Eloquent结果加工。

Laravel 的集合(Collection)是处理数组数据的强大工具,它基于 Illuminate\Support\Collection 类实现,提供了丰富的方法来操作数组或可遍历的数据。相比原生 PHP 数组函数,集合语法更优雅、链式调用更清晰,广泛用于 Eloquent 查询结果的后续处理。

创建集合

你可以通过 collect() 辅助函数创建一个集合:

$data = collect([1, 2, 3, 4, 5]);

这个 $data 就是一个 Laravel 集合对象,可以调用所有集合方法。

常用集合函数详解

map() - 映射转换元素

对集合中的每个元素执行回调函数,并返回新的集合。

$multiplied = collect([1, 2, 3])->map(fn($item) => $item * 2);

// 结果: [2, 4, 6]

注意:map 不保留原始键名,如需保留使用 mapWithKeys()

filter() - 过滤元素

根据回调返回 true 或 false 来筛选元素。

$even = collect([1, 2, 3, 4])->filter(fn($item) => $item % 2 === 0);

// 结果: [2, 4] (键保持不变)

最终可用 values() 重置键:

$even->values(); // [2, 4]

reduce() - 归约成单个值

将集合逐步合并为一个值,比如求和、拼接等。

$total = collect([1, 2, 3])->reduce(fn($carry, $item) => $carry + $item, 0);

// 结果: 6

carry 是累计值,初始值设为 0。

each() - 遍历集合

对每个元素执行操作,适合带副作用的逻辑(如发送邮件、记录日志)。

collect([1, 2, 3])->each(function ($item) {

echo $item;

});

与 map 不同,each 返回原集合,不生成新集合。

pluck() - 提取字段值

从数组或对象集合中提取某个字段的值。

$users = collect([

['name' => 'Alice', 'email' => 'alice@example.com'],

['name' => 'Bob', 'email' => 'bob@example.com']

]);

$names = $users->pluck('name');

// 结果: ['Alice', 'Bob']

支持嵌套字段:pluck('profile.phone')

sortBy() 和 sortByDesc() - 排序

按指定字段或回调排序。

$sorted = collect([

['name' => 'Zoe', 'age' => 25],

['name' => 'John', 'age' => 30]

])->sortBy('age');

// 按年龄升序排列

支持回调:

$sorted = $collection->sortBy(fn($person) => strlen($person['name']));

groupBy() - 分组

按字段或回调结果对元素分组。

$grouped = collect([

['product' => 'Desk', 'category' => 'Furniture'],

['product' => 'Chair', 'category' => 'Furniture'],

['product' => 'Phone', 'category' => 'Electronics']

])->groupBy('category');

// 结果: ['Furniture' => [...], 'Electronics' => [...]]

contains() - 判断是否存在

检查集合是否包含某个值或满足条件的元素。

collect([1, 2, 3])->contains(2); // true

$users->contains('name', 'Alice'); // 是否有 name 为 Alice 的用户

first() 和 last() - 获取首尾元素

获取第一个或最后一个元素,支持传入条件。

$firstEven = collect([1, 2, 3, 4])->first(fn($item) => $item % 2 === 0);

// 返回 2

也可设置默认值:

collect([])->first(fn() => true, 'default');

merge() 和 collapse() - 合并与扁平化

merge() 合并两个集合:

collect([1, 2])->merge([3, 4]); // [1, 2, 3, 4]

collapse() 将多个数组合并成一个扁平集合:

collect([[1, 2], [3, 4]])->collapse(); // [1, 2, 3, 4]

toArray() 和 toJson() - 转换格式

将集合转为数组或 JSON 字符串:

$data->toArray();

$data->toJson(); // '{"1":"value"}'

基本上就这些。Laravel 集合让数据处理变得更简洁直观,尤其适合在服务层或控制器中进行数据加工。掌握核心方法后,读写代码效率会明显提升。


# php  # laravel  # js  # json  # go  # 回调函数  # 工具  # ai  # 排列  # red  # echo  # strlen  # Filter  # 字符串  # Collection  # map  # function  # 对象  # default  # 回调  # 链式  # 遍历  # 升序  # 你可以  # 第一个  # 多个  # 设为  # 也可  # 数据处理 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel如何处理文件下载请求?(Response示例)  零服务器AI建站解决方案:快速部署与云端平台低成本实践  Win11搜索栏无法输入_解决Win11开始菜单搜索没反应问题【技巧】  Laravel distinct去重查询_Laravel Eloquent去重方法  Laravel如何生成URL和重定向?(路由助手函数)  Mybatis 中的insertOrUpdate操作  Laravel如何使用Sanctum进行API认证?(SPA实战)  Laravel如何实现API版本控制_Laravel版本化API设计方案  深圳网站制作平台,深圳市做网站好的公司有哪些?  在线制作视频的网站有哪些,电脑如何制作视频短片?  如何快速搭建高效WAP手机网站?  Laravel怎么返回JSON格式数据_Laravel API资源Response响应格式化【技巧】  jQuery中的100个技巧汇总  Laravel Eloquent性能优化技巧_Laravel N+1查询问题解决  Swift中swift中的switch 语句  如何在IIS中配置站点IP、端口及主机头?  JavaScript如何实现路由_前端路由原理是什么  Laravel怎么使用Blade模板引擎_Laravel模板继承与Component组件复用【手册】  如何在IIS中新建站点并配置端口与物理路径?  在线教育网站制作平台,山西立德教育官网?  音响网站制作视频教程,隆霸音响官方网站?  Laravel如何优雅地处理服务层_在Laravel中使用Service层和Repository层  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭  Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】  重庆市网站制作公司,重庆招聘网站哪个好?  作用域操作符会触发自动加载吗_php类自动加载机制与::调用【教程】  如何在Tomcat中配置并部署网站项目?  简单实现Android验证码  JavaScript中如何操作剪贴板_ClipboardAPI怎么用  javascript读取文本节点方法小结  JavaScript 输出显示内容(document.write、alert、innerHTML、console.log)  详解jQuery中基本的动画方法  长沙做网站要多少钱,长沙国安网络怎么样?  今日头条AI怎样推荐抢票工具_今日头条AI抢票工具推荐算法与筛选【技巧】  Python进程池调度策略_任务分发说明【指导】  Laravel如何实现数据导出到PDF_Laravel使用snappy生成网页快照PDF【方案】  Laravel如何实现一对一模型关联?(Eloquent示例)  EditPlus中的正则表达式 实战(1)  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程  Laravel Admin后台管理框架推荐_Laravel快速开发后台工具  html5怎么画眼睛_HT5用Canvas或SVG画眼球瞳孔加JS控制动态【绘制】  Laravel怎么导出Excel文件_Laravel Excel插件使用教程  Laravel安装步骤详细教程_Laravel环境搭建指南  CSS3怎么给轮播图加过渡动画_transition加transform实现【技巧】  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  魔方云NAT建站如何实现端口转发?  韩国代理服务器如何选?解析IP设置技巧与跨境访问优化指南  详解CentOS6.5 安装 MySQL5.1.71的方法