Skip to content

Collection 集合

Illuminate\Support\Collection 类提供了一个更具可读性的、更便于处理数组数据的封装,具体例子看下面的代码。

我们使用了 collect 函数从数组中创建新的集合实例,对其中的每个元素运行 strtoupper 函数之后再移除所有的空元素:

php
collect(['taylor', 'abigail', null])
  ->map(fn ($name) => strtoupper($name))
  ->reject(fn ($name) => empty($name));

正如你看到的,Collection 类允许你链式调用其方法,以达到在底层数组上优雅地执行 mapreject 操作。一般来说,集合是不可改变的,这意味着每个 Collection 方法都会返回一个全新的 Collection 实例。

创建集合

如上所述,辅助函数 collect 会为给定的数组返回一个新的 Illuminate\Support\Collection 实例。也就是说,创建一个集合就这么简单:

php
collect([1, 2, 3]);

默认情况下, Eloquent 查询的结果返回的内容都是 Collection 实例。

可用的方法

接下来的内容,我们会探讨 Collection 类每个可用的方法。**记住,所有方法都可以以方法链的形式优雅地操纵数组。**而且,几乎所有的方法都会返回新的 Collection 实例,允许在必要时保存集合的原始副本。

方法名简单说明
after获取给定项目之后的项目
all返回该集合表示的底层数组
average方法avg()的别名
avg返回给定键的平均值
before获取给定项目之前的项目
chunk将集合拆分为多个指定大小的集合组
chunkWhile根据给定的回调将集合分成多个较小的集合
collapse将数组集合折叠成单个集合
collectcollect 方法返回一个包含当前集合中的项目的新的 Collection 实例
combine将一个集合的值作为,再将另一个数组或者集合的值作为合并成一个集合
concat将给定数组或集合的值附加到另一个集合的末尾
contains判断集合是否包含给定的项目
containsOneItem判断集合是否包含单个项目
containsStrict使用「严格模式」来判断集合中是否包含给定的项目
count返回该集合内的项目总数
countBy计算集合中值的出现次数
crossJoin返回集合中所有可能排列的笛卡尔积
dd打印集合的元素并终止脚本的执行
diff基于值求差集
diffAssoc基于键值对求差集
diffAssocUsing使用回调获取集合中键和值不存在的项目
diffKeys基于键求差集
diffKeysUsing使用回调获取集合中键不存在于给定项中的项
diffUsing获取集合中不存在给定项目的项目
doesntContain判断集合是否不包含给定的项目
dump打印集合的元素
duplicates从集合中检索并返回重复值
duplicatesStrict使用严格模式从集合中检索并返回重复值
each迭代集合中的内容,同时将其传递到回调函数中
eachSpread迭代集合中的内容,同时将其传递到回调函数中
ensure确保集合中的项目属于特定数据类型
every可用于验证集合中每一个元素都通过回调测试
except返回集合中除了指定键以外的所有项目
filter使用给定的回调函数过滤集合的内容,只留下那些通过给定值为真的集合项
first返回集合中第一个元素
firstOrFail返回集合中第一个元素,如果没有匹配到则回抛出 ItemNotFoundException 错误
firstWhere返回给定键值对的第一个元素
flatMap遍历集合并将其中的每个值传递到给定的回调
flatten将多维集合转为一维
flip将集合中的键和对应的数值进行互换
forget改变原集合,通过给定的键来移除掉集合中对应的项
forPage返回给定页码上显示的项目的新集合
get获取一维数组给定键的集合项
groupBy根据给定的键对集合内的项目进行分组
has判断集合中是否存在给定的键
hasAny确定集合中是否存在任何指定的键
implode合并集合中的项目
intersect两个集合的交集
intersectByKeys删除原集合中不存在于给定数组或集合中的任何键
isEmpty判断集合是否为空
isNotEmpty判断集合是否不为空
join将集合的值与字符串连接起来
keyBy以给定的键作为集合的键
keys返回集合的所有键
last返回集合中通过给定真实测试的最后一个元素
lazy返回一个新的 LazyCollection 实例
macro在运行时向 Collection 类添加自定义方法
make创建一个新的集合实例
map遍历集合并将每一个值传入给定的回调
mapInto遍历集合,通过将值传递给构造函数来创建给定类的新实例
mapSpread改变原集合,迭代集合的项目,将每个嵌套的项目值传递到给定的闭包中。 闭包可以自由修改并返回它,从而形成一个新的修改后的集合。
mapToDirectory通过给定的闭包对集合的项目进行分组。该闭包应返回一个包含单个键/值对的关联数组,从而形成一个新的分组值数组
mapToGroups通过给定的闭包对集合的项目进行分组。 该闭包应返回一个包含单个键/值对的关联数组,从而形成一个新的分组值集合
mapWithKeys遍历集合并将每个值传入给定的回调
max返回给定的最大值
median方法返回给定的中间值
merge将给定数组或集合合并到原集合
mergeRecursive将给定的数组或集合与原始集合递归合并
min返回给定键的最小值
mode返回给定众数值
nth创建由每隔n个元素组成一个新集合
only返回集合中给定键的所有项目
pad将用给定的值填充数组,直到数组达到指定的大小
partition配合list()方法区分回调函数满足和不满足的数据
pipe将集合传给给定的回调并返回结果
pipeInto创建给定类的新实例,并将集合传递给构造函数
pipeThrough将集合传递给给定的闭包数组并返回执行闭包的结果
pluck获取集合中给定键对应的所有值
pop改变原集合,移除并返回集合中的最后一个项目
prepend改变原集合,将给定的值添加到集合的开头
pull改变原集合,把给定键对应的值从集合中移除并返回
push改变原集合,把给定值添加到集合的末尾
put改变原集合,在集合内设置给定的键值对
random从集合中返回一个随机项
reduce将每次迭代的结果传递给下一次迭代直到集合减少为单个值
reduceSpread将集合缩减为值数组,将每次迭代的结果传递到后续迭代中
reject使用指定的回调过滤集合
replace通过指定格式替换集合元素
replaceRecursive将集合递归到数组中并且对内部的值应用相同的替换
reverse倒转集合中项目的顺序
search搜索给定的值并返回它的键
select从多维数组中选择一定数量的键
shift改变原集合,移除并返回集合的第一个项目
shuffle随机排序集合中的项目
skip返回一个新的集合,其中给定数量的元素从集合的开头删除
skipUntil跳过集合中的项目,直到给定的回调返回 true ,然后将集合中的其余项目作为新集合实例返回
skipWhile跳过集合中的项目,同时给定的回调返回 true ,然后将集合中的其余项目作为新集合返回
slice返回集合中给定值后面的部分
slidingsliding 方法返回一个新分组的块集合
sole返回集合中通过给定真值测试的第一个元素
somecontains 方法的别名
sort保留原数组的键,对集合进行排序
sortBy以给定的键对集合进行正序排序
sortByDescsortBy 一样,以相反的顺序来对集合进行排序
sortDesc对集合进行倒序排序
sortKeys按底层关联数组的键对集合进行排序
sortKeysDesc按底层关联数组的键对集合进行倒序排序
sortKeysUsing使用回调按底层关联数组的键对集合进行排序
splice删除并返回从给定值后的内容,原集合也会受到影响
split将集合按给定的值拆分
splitIn将集合分为给定数量的组
sum返回集合内所有项目的总和
take返回给定数量项目的新集合
takeUntil将返回集合中的项目,直到给定的回调返回 true
takeWhile返回集合中的项目,直到给定的回调返回 false
tap将集合传递给回调,在特定点「tap」集合
times通过回调在给定次数内创建一个新的集合
toArray将集合转换成 PHP 数组
toJson将集合转换成 JSON 字符串
transform改变原集合,迭代集合并对集合内的每个项目调用给定的回调
undot使用"点"表示法的单维集合扩展为多维集合
union将给定的数组添加到集合中,求并集
unique返回集合中所有唯一的项目
uniqueStrict使用严格模式返回集合中所有唯一的项目
unless除非方法的第一个参数的计算结果为true,否则该方法将执行给定的回调
unlessEmptywhenNotEmpty 方法的别名
unlessNotEmptywhenEmpty 方法别名
unwrap静态 unwrap 方法在适用时从给定值返回集合的基础项
value从集合的第一个元素中检索给定值
values返回键被重置为连续编号的新集合
when当传入的第一个参数为 true 的时,将执行给定的回调
whenEmpty当集合为空时,whenEmpty 方法将执行给定的回调
whenNotEmpty当集合不为空时,whenNotEmpty 方法将执行给定的回调
where通过给定的键值过滤集合
whereStrict使用严格模式通过给定的键值过滤集合
whereBetween通过确定指定的项目值是否在给定范围内来过滤集合
whereIn通过给定的键值数组来过滤集合
whereInStrict使用严格模式通过给定的键值数组来过滤集合
whereInstanceOf按给定的类类型过滤集合
whereNotBetween通过确定指定的项目值不存在给定范围内来过滤集合
whereNotIn集合中不包含的给定键值对进行匹配
whereNotInStrict使用严格模式通过集合中不包含的给定键值对进行匹配
whereNotNull返回集合中给定键不为 null 的项目
whereNull返回集合中给定键为 null 的项目
wrap静态 wrap 方法在适用时将给定值包装在集合中
zip将给定数组的值与相应索引处的原集合的值合并在一起

其它项目使用

安装

Laravel 中的 Collection 使用 Composer 管理,所以可以在项目中使用 composer 安装到非 Laravel 项目中,通过下面使用命令安装它。

bash
composer require illuminate/support

执行完上面的命令将得到所需要的拓展包。

使用

php
<?php
// 引入 package
require __DIR__ . '/vendor/autoload.php';

// 简单使用
collect([1, 2, 3]); // Illuminate\Support\Collection {#1070 all: [1, 2, 3]}

在JS中使用集合操作

如果在 JavaScript 中也需要使用类似的数组操作,具体可以可以参考 ecrmnn/collect.js