Laravel Eloquent 通常返回一个集合作为结果,集合包含很多有用的、功能强大的方法。
你可以很方便的对集合进行过滤、修改等操作。
本次教程就一起来看一看集合的常用方法及功能。
你可以使用助手函数 collect将数组转化为集合。
php
$data = collect([1, 2, 3]);
1.增加
php
$data = collect([1, 2, 3]);
$data->push(3);
//输出
array:4 [▼
0 => 1
1 => 2
2 => 3
3 => 3
]
$data->put('name','yuan');
//输出
array:4 [▼
0 => 1
1 => 2
2 => 3
"name" => "yuan"
]
2.修改
php
$data = collect([1, 2, 3]);
$data->put(0, 'yuan');
//输出
array:3 [▼
0 => "yuan"
1 => 2
2 => 3
]
3.查询
php
#1.根据键值获取
$data = collect([1, 2, 3]);
$res=$data->get(1);
//输出 2
#2.返回第一个元素
$data ->shift();
//输出 1
#3.给定值查询集合,如果找到的话返回对应的键,如果没找到,则返回false
$res=$data->search(3);
//输出 2
#4.严格比较
$res=$data->search(6,true);
//输出 false
#5.转化为数组
$res=$data->toArray();
#6.转化为JSON
$res=$data->toJson();
4.删除
php
# 根据键值删除
$res = $data->forget('1');
# 从索引起切除一段后返回
# $collection->splice( <索引>, [ <切片长度> ] );
# 注:性质同 `slice`,不同的地方在于 `slice` 不会更改原有集合
# $collection->splice( <索引>, [ <切片长度> ], [ <切去的要替换成的元素数组> ] );
# 注:传入含有新元素的数组作为第三个参数以取代集合中被移除的元素
$data = collect([1, 2, 3]);
$data->splice(0, 1);
//输出
array:2 [▼
0 => 2
1 => 3
]
5.统计
php
#1.求个数
$collection->count();
#2.求平均
$collection->avg();
$collection->avg('<键名>'); // 多维
#3.求和
$collection->sum();
$collection->sum('<键名>'); // 多维
#4.求最大值
$collection->max();
$collection->max('<键名>'); // 多维
#5.求最小值
$collection->min();
$collection->min('<键名>'); // 多维
6.筛选
php
#1.第一个元素
$collection->first();
#2.最后一个元素
$collection->last();
#3.条件查询
$user = User::all();
$data = collect($user);
$res = $data->first(function ($key, $value) {
return $key->id > 9;
});
//输出 id>9的数据
#4.多维数组筛选,返回元素
$collection->where( <键名>, <键值>, [ $strict = true ] ); // 默认严格模式
$collection->whereLoose( <键名>, <键值> ); // 宽松模式
$collection->whereIn( <键名>, <键值数组>, [ $strict = true ] ); // 默认严格模式
$collection->whereInLoose( <键名>, <键值数组> ); // 宽松模式
//例:$res = $data->where('id', '>',1);
#5.获取唯一的元素
$collection->unique(); // 一维
$collection->unique( <键名> ); // 多维
$collection->unique( function( $item ){
return <确定是否唯一的值>;
} );
7.排序
php
#1.所有底层数组
$collection->all();
#2.键名重新生成
$collection->values();
#3.返回新的随机排序的集合
$collection->shuffle();
#4.返回新的倒序的集合
$collection->reverse();
#5.返回从索引起的切片
$collection->slice( <索引>, [ <切片长度> ] );
# 注释:索引可以为负数,长度不填默认至最后一个元素
#6.一维集合排序
$collection->sort( [ function( $a, $b ){
return < -1 | 1 | 0 >;
} ] );
# 注:不传回调函数,则默认由小到大
#7.多维集合排序
$collection->sortBy( <列名> ) // 以某列排序
$collection->sortBy( function( $item, $key ){
return <参于排序的数>;
} )
# 注:排序从小到大依次为 undefined、字符或字符串、数字、数组对象
# 同为 undefined ,先出现的在前
# 同为 字符或字符串 ,一个字符一个字符比较其 Ascii 码
# 同为 数组或对象 ,比较其元素个数
#8.多维集合排序倒序,性质同 `sortBy`
$collection->sortByDesc();
#9.取指定数量的元素的集合
$collection->take( <数量> );
# 注:数量为负数,表示从末尾取
8.判断
php
#1.是否为空
$collection->isEmpty();
#2.是否含有指定值
$collection->contains( <键值> );
$collection->contains( <键名>, <键值> ); // 多维
$collection->contains(function( $key, $value ){
return <判断条件>
});
#3.是否含有指定的键
$collection->has( <键名> );
9.合并
php
#1.集合元素拼接
$collection->implode( <拼接字符> ); // 一维
$collection->implode( <键名>, <拼接字符> ); // 多维中的某列
#2.按个数拆分成多维
$prices = $collection->chunk(3);
$prices->toArray();
输出:
[
0 => [
0 => 18,
1 => 23,
2 => 65
],
1 => [
3 => 36,
4 => 97,
5 => 43
],
2 => [
6 => 81
]
]
#3.多维合并为一维
$collection->collapse();
# 注:对于 item 不是数组的,会被丢弃
#4.合并键值对(集合值作为键,另一集合或数组作为对应值)
$collection->combine( <值数组> );
# 注:集合与另一集合或集合必须保持相同的元素个数
# 合并结果可能会由于集合有相同的值作为键值而个数减小
# 后出现的会覆盖前面出现的
collect([ 1, 2, '1' ])->combine([ 'a', 'b', 'c' ]);
// [ 1 => 'c', 2 => 'b' ]
#5.索引合并
$collection->zip( <新数组> );
collect([ 1, 2 ])->zip([ 'a', 'b' ]);
// [ [ 1, 'a' ], [ 2, 'b' ] ]
10.遍历
php
#1.遍历
$collection->each(function ($value, $key) {
<...>
});
注:回调函数中,返回 false 会终止遍历
#2.遍历返回,形成新的集合
$collection->map(function ($value, $key) {
<...>
return <元素的新值>;
例子:$value['user_id'] += 1;
return $value;
});
#3.遍历修改,*直接更改了原有集合*
$collection->transform(function ($value, $key) {
<...>
return <元素的新值>;
});
#4.遍历执行回调,最后转为一维集合返回
$collection->flatMap(function( $value, $key ){
return <新的元素>;
});
# 注:等价于 ->map()->collapse();
#5.集合与数组合并
$collection->union( <数组> );
# 注:若集合与数组具有相同的键名,集合的将会保留,性质类同于 `+`
11.参考链接
php
https://www.cnblogs.com/Json159/p/9570903.html
https://learnku.com/laravel/t/27647