Laravel 集合
Laravel 集合笔记
- 筛选
- 条件查询
$user = User::all(); $data = collect($user); $res = $data->first(function ($key, $value) { return $key->id > 9; });
- 多维数组筛选
$collection->where( <键名>, <键值>, [ $strict = true ] ); // 默认严格模式 $collection->whereLoose( <键名>, <键值> ); // 宽松模式 $collection->whereIn( <键名>, <键值数组>, [ $strict = true ] ); // 默认严格模式 $collection->whereInLoose( <键名>, <键值数组> ); // 宽松模式 //例:$res = $data->where('id', '>',1);
- 获取唯一的元素
$collection->unique(); // 一维 $collection->unique( <键名> ); // 多维 $collection->unique( function( $item ){ return <确定是否唯一的值>; });
- 过滤
collect(['product_id' => 1, 'name' => 'Desk', 'price' => 100, 'discount' => false])->only(['product_id', 'name']);//only返回集合中指定键的所有项目 collect(['product_id' => 1, 'name' => 'Desk', 'price' => 100, 'discount' => false])->except(['price', 'discount']);//except 则返回集合中除了指定键的所有项目
- 添加
collect(['one' => 1, 'two' => 2])->->prepend(0, 'zero');//prepend在集合前面增加一个项目 collect(['product_id' => 1, 'name' => 'Desk'])->put('price', 100);//put在集合尾巴添加
- 排序
$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 <参于排序的数>; } ) $collection->sortByDesc();//多维集合排序倒序 $collection->take( <数量> );//取指定数量的元素的集合
- 判断
$collection->isEmpty();//是否为空 $collection->contains( <键值> ); $collection->contains( <键名>, <键值> ); $collection->contains(function( $key, $value ){ return <判断条件> //多维 }); $collection->has( <键名> );//是否含有指定的键
- 合并
$collection->implode( <拼接字符> ); // 一维 集合元素拼接 $collection->implode( <键名>, <拼接字符> ); // 多维中的某列 $collection->chunk( <每个小集合元素个数> );//按个数拆分成多维 $collection->collapse();//多维合并为一维 对于 item 不是数组的,会被丢弃 //合并键值对(集合值作为键,另一集合或数组作为对应值) $collection->combine( <值数组> );//collect([ 1, 2, '1' ])->combine([ 'a', 'b', 'c' ]); $collection->zip( <新数组> );//索引合并 collect([ 1, 2 ])->zip([ 'a', 'b' ]);//[ [ 1, 'a' ], [ 2, 'b' ] ] $collection->flatten();//多维合并 //['taylor', 'php', 'javascript']; collect(['name' => 'taylor', 'languages' => ['php', 'javascript']])->flatten()->all();
- 求差集
//diff 方法将集合和另一个集合或原生PHP数组以基于值的方式作比较,这个方法会返回存在于原来集合而不存在于给定集合的值 $collection->diff(); //diffAssoc 方法会基于键值将一个集合和另一个集合或原生 PHP 数组进行比较。该方法返回只存在于第一个集合中的键值对。 $collection->diffAssoc();
- 键值交换
$collection->flip();
- 分页
//forPage 方法返回新的包含给定页数数据项的集合。该方法接收页码数作为第一个参数,每页显示数据项数作为第二个参数 $collection->forPage(2, 3);
- 分组集合数据项
$collection->groupBy('account_id');
- 将指定键的值作为集合的键,类似array_column($arr,null,key)
collect([ ['product_id' => 'prod-100', 'name' => 'desk'], ['product_id' => 'prod-200', 'name' => 'chair'], ])->->keyBy('product_id')->all();
- 遍历
//遍历 注:回调函数中,返回false相当于break 其它返回相当于continue $collection->each(function ($item, $key) { <...> }); //遍历返回,形成新的集合 $collection->map(function ($item, $key) { <...> return <新的元素>; }); //遍历修改,*直接更改了原有集合* $collection->transform(function ($item, $key) { <...> return <元素的新值>; }); //遍历执行回调,最后转为一维集合返回 注:等价于 ->map()->collapse(); $collection->flatMap(function( $item, $key ){ return <新的元素>; }); //集合与数组合并 注:若集合与数组具有相同的键名,集合的将会保留,性质类同于 `+` $collection->union( <数组> );
参考链接
正因为来之不易,所以才有了后来的倍加珍惜。