Laravel 集合操作总结

目录
  1. 1. 简介
  2. 2. 基本用法
    1. 2.1. 创建
    2. 2.2. 统计类方法
    3. 2.3. 筛选类方法
    4. 2.4. 获取新集合类方法
    5. 2.5. 判断类方法
    6. 2.6. 维度变化方法
    7. 2.7. 遍历类方法
    8. 2.8. 集合元素增删改
    9. 2.9. 转化类方法

简介

  1. Illuminate\Support\Collection 类提供一个流畅、便利的封装来操控数组数据,支持链式调用。
  2. 绝大多数 collection 方法会返回一个新的集合、元素、统计数据,小部分会修改原有集合。

基本用法

创建

$collection = collect([1, 2, 3]);

统计类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 求个数
$collection->count();
$collection->count(1); // 递归模式
# 求平均
$collection->avg();
$collection->avg('<键名>'); // 多维
# 求和
$collection->sum();
$collection->sum('<键名>'); // 多维
# 求最大值
$collection->max();
$collection->max('<键名>'); // 多维
# 求最小值
$collection->min();
$collection->min('<键名>'); // 多维

筛选类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# 第一个元素
$collection->first();
# 第一个通过测试的元素
$collection->first(function( $key, $value ){
return <条件判断>
});
# 注:集合为空,返回 null
# 最后一个元素
$collection->last();
# 最后一个通过测试的元素
$collection->last(function( $key, $value ){
return <条件判断>
});
# 注:集合为空,返回 null
# 搜索数值,找到返回键值,未找到返回 false
$collection->search(<搜索值>);
# 严格模式搜索,比较值和类型
$collection->search(<搜索值>, true);
# 回调搜索
$collection->search(function( $item, $key ){
return <条件判断>
});
# 多维数组筛选,返回元素
$collection->where( <键名>, <键值>, [ $strict = true ] ); // 默认严格模式
$collection->whereLoose( <键名>, <键值> ); // 宽松模式
$collection->whereIn( <键名>, <键值数组>, [ $strict = true ] ); // 默认严格模式
$collection->whereInLoose( <键名>, <键值数组> ); // 宽松模式
# 获取唯一的元素
$collection->unique(); // 一维
$collection->unique( <键名> ); // 多维
$collection->unique( function( $item ){
return <确定是否唯一的值>;
} );

获取新集合类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 所有底层数组
$collection->all();
# 键名重新生成
$collection->values();
# 返回新的随机排序的集合
$collection->shuffle();
# 返回新的倒序的集合
$collection->reverse();
# 返回从索引起的切片
$collection->slice( <索引>, [ <切片长度> ] );
# 注释:索引可以为负数,长度不填默认至最后一个元素
# 一维集合排序
$collection->sort( [ function( $a, $b ){
return < -1 | 1 | 0 >;
} ] );
# 注:不传回调函数,则默认由小到大
# 多维集合排序
$collection->sortBy( <列名> ) // 以某列排序
$collection->sortBy( function( $item, $key ){
return <参于排序的数>;
} )
# 注:排序从小到大依次为 undefined、字符或字符串、数字、数组对象
# 同为 undefined ,先出现的在前
# 同为 字符或字符串 ,一个字符一个字符比较其 Ascii 码
# 同为 数组或对象 ,比较其元素个数
# 多维集合排序倒序,性质同 `sortBy`
$collection->sortByDesc();
# 取指定数量的元素的集合
$collection->take( <数量> );
# 注:数量为负数,表示从末尾取

判断类方法

1
2
3
4
5
6
7
8
9
10
# 是否为空
$collection->isEmpty();
# 是否含有指定值
$collection->contains( <键值> );
$collection->contains( <键名>, <键值> ); // 多维
$collection->contains(function( $key, $value ){
return <判断条件>
});
# 是否含有指定的键
$collection->has( <键名> );

维度变化方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# 集合元素拼接
$collection->implode( <拼接字符> ); // 一维
$collection->implode( <键名>, <拼接字符> ); // 多维中的某列
# 按个数拆分成多维
$collection->chunk( <每个小集合元素个数> );
# 多维合并为一维
$collection->collapse();
# 注:对于 item 不是数组的,会被丢弃
# 合并键值对(集合值作为键,另一集合或数组作为对应值)
$collection->combine( <值数组> );
# 注:集合与另一集合或集合必须保持相同的元素个数
# 合并结果可能会由于集合有相同的值作为键值而个数减小
# 后出现的会覆盖前面出现的
collect([ 1, 2, '1' ])->combine([ 'a', 'b', 'c' ]);
// [ 1 => 'c', 2 => 'b' ]
# 索引合并
$collection->zip( <新数组> );
collect([ 1, 2 ])->zip([ 'a', 'b' ]);
// [ [ 1, 'a' ], [ 2, 'b' ] ]

遍历类方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 遍历
$collection->each(function ($item, $key) {
<...>
});
注:回调函数中,返回 false 会终止遍历
# 遍历返回,形成新的集合
$collection->map(function ($item, $key) {
<...>
return <新的元素>;
});
# 遍历修改,*直接更改了原有集合*
$collection->transform(function ($item, $key) {
<...>
return <元素的新值>;
});
# 遍历执行回调,最后转为一维集合返回
$collection->flatMap(function( $item, $key ){
return <新的元素>;
});
# 注:等价于 ->map()->collapse();
# 集合与数组合并
$collection->union( <数组> );
# 注:若集合与数组具有相同的键名,集合的将会保留,性质类同于 `+`

集合元素增删改

1
2
3
4
5
6
7
# 移除并返回第一个元素
$collection->shift();
# 从索引起切除一段后返回
$collection->splice( <索引>, [ <切片长度> ] );
# 注:性质同 `slice`,不同的地方在于 `slice` 不会更改原有集合
$collection->splice( <索引>, [ <切片长度> ], [ <切去的要替换成的元素数组> ] );
# 注:传入含有新元素的数组作为第三个参数以取代集合中被移除的元素

转化类方法

1
2
3
4
5
# 转化为数组
$collection->toArray();
# 注:`toArray` 也会转换所有内嵌的对象为数组。`all` 只会转化底层数组
# 转化为Json
$collection->toJson();