简介
- Illuminate\Support\Collection 类提供一个流畅、便利的封装来操控数组数据,支持链式调用。
- 绝大多数 collection 方法会返回一个新的集合、元素、统计数据,小部分会修改原有集合。
基本用法
创建
$collection = collect([1, 2, 3]);
统计类方法
# 求个数 $collection->count(); $collection->count(1); // 递归模式 # 求平均 $collection->avg(); $collection->avg('<键名>'); // 多维 # 求和 $collection->sum(); $collection->sum('<键名>'); // 多维 # 求最大值 $collection->max(); $collection->max('<键名>'); // 多维 # 求最小值 $collection->min(); $collection->min('<键名>'); // 多维
筛选类方法
# 第一个元素 $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 <确定是否唯一的值>; } );
获取新集合类方法
# 所有底层数组 $collection->all(); # 获取指定键的值 $collection->get(<键>, [<默认值|匿名函数>]); # 获取单列 $collection->pluck(<列名>, [ <键> ]) # 键名重新生成 $collection->values(); # 键名成新集合 $collection->keys(); # 设置集合的键名 $collection->keyBy(<列名>); # 键值互换 $collection->flip(); # 返回新的随机排序的集合 $collection->shuffle(); # 返回新的倒序的集合 $collection->reverse(); # 与其他集合合并 $collection->union(<集合>); # 不在指定范围内的移除 $collection->intersect(<数组|集合>); // 结果会保留原键值 # 不在指定范围内的键名移除 $collection->intersectByKeys(<数组|集合>); // 结果会保留原键值 # 返回从索引起的切片 $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( <数量> ); # 注:数量为负数,表示从末尾取
判断类方法
# 是否为空 $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' ]); // [ 1 => 'c', 2 => 'b' ] # 索引合并 $collection->zip( <新数组> ); collect([ 1, 2 ])->zip([ 'a', 'b' ]); // [ [ 1, 'a' ], [ 2, 'b' ] ]
遍历类方法
# 遍历 $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( <数组> ); # 注:若集合与数组具有相同的键名,集合的将会保留,性质类同于 `+`
集合元素增删改
# 移除并返回第一个元素 $collection->shift(); # 从索引起切除一段后返回 $collection->splice( <索引>, [ <切片长度> ] ); # 注:性质同 `slice`,不同的地方在于 `slice` 不会更改原有集合 $collection->splice( <索引>, [ <切片长度> ], [ <切去的要替换成的元素数组> ] ); # 注:传入含有新元素的数组作为第三个参数以取代集合中被移除的元素
转化类方法
# 转化为数组 $collection->toArray(); # 注:`toArray` 也会转换所有内嵌的对象为数组。`all` 只会转化底层数组 # 转化为Json $collection->toJson();