Laravel 的集合 Collection
简介
Illuminate\Support\Collection
类提供了一个更具可读性的、更便于处理数组数据的封装,具体例子看下面的代码。
我们使用了 collect
函数从数组中创建新的集合实例,对其中的每个元素运行 strtoupper
函数之后再移除所有的空元素:
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
return strtoupper($name);
})
->reject(function ($name) {
return empty($name);
});
正如你看到的,Collection
类允许你链式调用其方法,以达到在底层数组上优雅地执行 map 和 reject 操作。一般来说,集合是不可改变的,这意味着每个 Collection
方法都会返回一个全新的 Collection
实例。
创建集合
如上所述,辅助函数 collect
会为给定的数组返回一个新的 Illuminate\Support\Collection
实例。也就是说,创建一个集合就这么简单:
$collection = collect([1, 2, 3]);
默认情况下, Eloquent 查询的结果返回的内容都是
Collection
实例。
可用的方法
接下来的内容,我们会探讨 Collection
类每个可用的方法。记住,所有方法都可以以方法链的形式优雅地操纵数组。而且,几乎所有的方法都会返回新的 Collection
实例,允许你在必要时保存集合的原始副本。
方法名 | 释义 |
---|---|
all 详细 | 返回该集合表示的底层数组 |
average 详细 | 方法avg() 的别名 |
avg 详细 | 返回给定键的平均值 |
chunk 详细 | 将集合拆成多个指定大小的小集合 |
collapse 详细 | 将多个数组合并成一个 |
combine 详细 | 将一个集合的值作为「键」,再将另一个数组或者集合的值作为「值」合并成一个集合 |
contains 详细 | 判断集合是否包含给定的项目 |
containsStrict 详细 | 使用「严格模式」来比较所有值 |
count 详细 | 返回该集合内的项目总数 |
diff 详细 | 基于值求差集 |
diffAssoc 详细 | 基于键值对求差集 |
diffKeys 详细 | 基于键求差集 |
each 详细 | 迭代集合中的内容并将其传递到回调函数中 |
every 详细 | 可用于验证集合中每一个元素都通过给定的真实测试 |
except 详细 | 返回集合中除了指定键以外的所有项目 |
filter 详细 | 使用给定的回调函数过滤集合的内容,只留下那些通过给定真实测试的内容 |
first 详细 | 返回集合中通过给定真实测试的第一个元素 |
flatMap 详细 | 遍历集合并将其中的每个值传递到给定的回调 |
flatten 详细 | 将多维集合转为一维 |
flip 详细 | 将集合中的键和对应的数值进行互换 |
forget 详细 | 通过给定的键来移除掉集合中对应的内容 |
forPage 详细 | 返回给定页码上显示的项目的新集合 |
get 详细 | 返回给定键的项目 |
groupBy 详细 | 根据给定的键对集合内的项目进行分组 |
has 详细 | 判断集合中是否存在给定的键 |
implode 详细 | 合并集合中的项目 |
intersect 详细 | 从原集合中删除不在给定数组或集合中的任何值 |
intersectKey 详细 | 删除原集合中不存在于给定数组或集合中的任何键 |
isEmpty 详细 | 判断集合是否为空 |
isNotEmpty 详细 | 判断集合是否不为空 |
keyBy 详细 | 以给定的键作为集合的键 |
keys 详细 | 返回集合的所有键 |
last 详细 | 返回集合中通过给定真实测试的最后一个元素 |
map 详细 | 遍历集合并将每一个值传入给定的回调 |
mapWithKeys 详细 | 遍历集合并将每个值传入给定的回调 |
max 详细 | 返回给定键的最大值 |
median 详细 | 方法返回给定键的中间值 |
merge 详细 | 将给定数组或集合合并到原集合 |
min 详细 | 返回给定键的最小值 |
mode 详细 | 返回给定键的众数值 |
nth 详细 | 创建由每隔n 个元素组成一个新的集合 |
only 详细 | 返回集合中给定键的所有项目 |
partition 详细 | 配合list() 方法区分回调函数满足和不满足的数据 |
pipe 详细 | 将集合传给给定的回调并返回结果 |
pluck 详细 | 获取集合中给定键对应的所有值 |
pop 详细 | 移除并返回集合中的最后一个项目 |
prepend 详细 | 将给定的值添加到集合的开头 |
pull 详细 | 把给定键对应的值从集合中移除并返回 |
push 详细 | 把给定值添加到集合的末尾 |
put 详细 | 在集合内设置给定的键值对 |
random 详细 | 从集合中返回一个随机项 |
reduce 详细 | 将每次迭代的结果传递给下一次迭代直到集合减少为单个值 |
reject 详细 | 使用指定的回调过滤集合 |
reverse 详细 | 倒转集合中项目的顺序 |
search 详细 | 搜索给定的值并返回它的键 |
shift 详细 | 移除并返回集合的第一个项目 |
shuffle 详细 | 随机排序集合中的项目 |
slice 详细 | 返回集合中给定值后面的部分 |
sort 详细 | 保留原数组的键,对集合进行排序 |
sortBy 详细 | 以给定的键对集合进行排序 |
sortByDesc 详细 | 与sortBy一样,以相反的顺序来对集合进行排序 |
splice 详细 | 删除并返回从给定值后的内容,原集合也会受到影响 |
split 详细 | 将集合按给定的值拆分 |
sum 详细 | 返回集合内所有项目的总和 |
take 详细 | 返回给定数量项目的新集合 |
tap 详细 | 将集合传递给回调,在特定点「tap」集合 |
times 详细 | 通过回调在给定次数内创建一个新的集合 |
toArray 详细 | 将集合转换成 PHP 数组 |
toJson 详细 | 将集合转换成 JSON 字符串 |
transform 详细 | 迭代集合并对集合内的每个项目调用给定的回调 |
union 详细 | 将给定的数组添加到集合中 |
unique 详细 | 返回集合中所有唯一的项目 |
uniqueStrict 详细 | 使用严格模式返回集合中所有唯一的项目 |
values 详细 | 返回键被重置为连续编号的新集合 |
when 详细 | 当传入的第一个参数为 true 的时,将执行给定的回调 |
where 详细 | 通过给定的键值过滤集合 |
whereStrict 详细 | 使用严格模式通过给定的键值过滤集合 |
whereIn 详细 | 通过给定的键值数组来过滤集合 |
whereInStrict 详细 | 使用严格模式通过给定的键值数组来过滤集合 |
whereNotIn 详细 | 集合中不包含的给定键值对进行匹配 |
whereNotInStrict 详细 | 使用严格模式通过集合中不包含的给定键值对进行匹配 |
zip 详细 | 将给定数组的值与相应索引处的原集合的值合并在一起 |
在项目中单独使用
安装
Laravel中的Collection使用Composer管理,所以我们可以在项目中使用composer安装到非Laravel项目中,比如我们新建一个collections目录,通过下面使用命令安装
mkdir collections && cd collections
composer require illuminate/support
执行完上面的命令将得到所需要的package。
使用
<?php
// 引入package
require __DIR__ . '/vendor/autoload.php';
其他
如果在js中也需要使用类似的数组操作,可以参考 ecrmnn/collect.js 的相关操作。