1.简介
Illuminate\Support\Collection类为数组数据转化提供了顺畅和方便的压缩方式。例如,下面的代码,我们用一个数组创建一个collect实例对每一个元素运行strtoupper方法并随后移除所有的空元素。
$collection = collect(['taylor', 'abigail', null])->map(function ($name) {
return strtoupper($name);
})->reject(function ($name) {
return empty($name);
});
你可以看到,Collection类允许你使用关联的方法mapping和reducing去表现出你想需要的数组信息。一般collection不可改变,意味着每一个Collection方法返回一个整体的Collection实例对象。
2.创建一个collection
$collection = collect([1, 2, 3]);
Eloquent(object-relational mapper (ORM))查询结果总以Collection实例返回
3.扩展Collection
Collections可以进行“宏指令编辑”,运行时可以加入你想要的方法。macro方法调用时会接收一个闭包函数。如果这个函数成为collection类中的方法时,闭包函数可以通过$this和collection方法交互联系。例如下面的代码:
use Illuminate\Support\Collection;
use Illuminate\Support\Str;
Collection::macro('toUpper', function () {
return $this->map(function ($value) {
return Str::upper($value);
});
});
$collection = collect(['first', 'second']);
$upper = $collection->toUpper();
// ['FIRST', 'SECOND']
Macro Arguments(Macro 参数)
你可以定义macros时接受加入的参数:
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\Lang;
use Illuminate\Support\Str;
Collection::macro('toLocale', function ($locale) {
return $this->map(function ($value) use ($locale) {
return Lang::get($value, [], $locale);
});
});
$collection = collect(['first', 'second']);
$translated = $collection->toLocale('es');
4.可用方法
Collection所有的这些方法可以非常顺畅流利地操作数组数据。 此外,几乎每一个方法都会返回一个Collection实例对象。如果有必要允许你拷贝collection,保护好原始数据:
all()
collect([1, 2, 3])->all();
//返回在collection形式下数组元素
average()平均数
别名:avg()
$average = collect([
['foo' => 10],
['foo' => 10],
['foo' => 20],
['foo' => 40]
])->avg('foo');
// 20 返回指定key的平均数
$average = collect([1, 1, 2, 4])->avg();
// 2 所有数的平均数
chunk()
$collection = collect([1, 2, 3, 4, 5, 6, 7]);
$chunks = $collection->chunk(4);
$chunks->all();
// [[1, 2, 3, 4], [5, 6, 7]]
chunkWhile()
$collection = collect(str_split('AABBCCCD'));
$chunks = $collec