1、首先學會數組轉集合的方式
(1)使用collect函數
? ? ? ? $arr = [1, 2, 3, 4, 5];
?? ??? ?$collect = collect($arr);
(2)使用array_map函數
?? ??? ?$arr = [1, 2, 3, 4, 5];
? ? ? ? $collect = array_map(function($item){
? ? ? ? ? ? return $item * $item;
? ? ? ? }, $arr);
2、集合高階函數使用教程
假設 $collection = collect(['susan', 'bob', 'jason', 'mali']);
(1)使用過濾函數filter()
?? ??? ?$result = $collection->filter(function ($value) {
?? ??? ??? ?return $value == 'bob';
?? ??? ?});
?
(2)search 方法可以用給定的值查找集合。如果這個值在集合中,會返回對應的鍵。如果沒有數據項匹配對應的值,會返回 false。
$names->search('mali');
// 返回3
(3)dump(),集合打印
collection->dump();
(4)使用map遍歷
?? ??? ?$result = $collection->map(function ($value) {
?? ??? ??? ?return $value .= '123';
?? ??? ?});
?
(5)使用zip()函數
Zip 方法會將給定數組的值與集合的值合并在一起。相同索引的值會添加在一起,這意味著,數組的第一個值會與集合的第一個值合并。在這里,我會使用我們在上面剛剛創建的集合。這對 Eloquent 集合同樣有效。
?? ??? ?$result = $collection->zip([1, 2, 3]);
(6)whereNotIn按照給定數組中包含的鍵值過濾集合
?? ??? ?$collection = collect([
?? ??? ??? ?['user_id' => 1],
?? ??? ??? ?['user_id' => 2],
?? ??? ??? ?['user_id' => 3],
?? ??? ?]);
?? ??? ?$result = $collection->whereNotIn('user_id', [1, 2]);
(7)whereNotIn按照給定數組中未包含的鍵值過濾集合
?? ??? ?$collection = collect([
?? ??? ??? ?['user_id' => 1],
?? ??? ??? ?['user_id' => 2],
?? ??? ??? ?['user_id' => 3],
?? ??? ?]);
?? ??? ?$result = $collection->whereNotIn('user_id', [1, 2]);
?
(8)max 方法返回給定鍵的最大值
? ? ? ?$collection = collect([
?? ??? ??? ?['user_id' => 1],
?? ??? ??? ?['user_id' => 2],
?? ??? ??? ?['user_id' => 3],
?? ??? ?]);
?? ??? ?$result = $collection->max('user_id');
? ? ? ? //結果為3
(9)pluck 方法返回指定鍵的所有值。 它對于提取一列的值很有用。
? ? ? ?$collection = collect([
?? ??? ??? ?['user_id' => 1],
?? ??? ??? ?['user_id' => 2],
?? ??? ??? ?['user_id' => 3],
?? ??? ?]);
?? ??? ?$result = $collection->pluck('user_id');
(10)each 是一種迭代整個集合的簡單方法。 它接受一個帶有兩個參數的回調:它正在迭代的項和鍵。 Key 是基于 0 的索引。
$posts->each(function ($item, $key) {
? ? // Do something
});
(11)tap() 方法允許你隨時加入集合。 它接受回調并傳遞并將集合傳遞給它。 您可以對項目執行任何操作,而無需更改集合本身。 因此,您可以在任何時候使用tap來加入集合,而不會改變集合。
$collection->whereNotIn('user_id', 3)
? ? ->tap(function ($collection) {
? ? ? ? $collection = $collection->where('user_id', 1);
? ? ? ? info($collection->values());
? ? })
? ? ->all();
(12)pipe 方法非常類似于 tap 方法,因為它們都在集合管道中使用。 pipe 方法將集合傳遞給回調并返回結果。
$collection->pipe(function($collection) {
? ? return $collection->min('user_id');
});
(13)contains 方法只檢查集合是否包含給定值。 只傳遞一個參數時才會出現這種情況。
$contains->contains('USA');
// true
$contains->contains('UK');
// false
(14)forget 只是從集合中刪除該項。 您只需傳遞一個鍵,它就會從集合中刪除該項目。
$forget = collect(['country' => 'usa', 'state' => 'ny']);
$forget->forget('country')->all();
(15)avg()
$avg = collect([
? ? ['shoes' => 10],
? ? ['shoes' => 35],
? ? ['shoes' => 7],
? ? ['shoes' => 68],
])->avg('shoes');
?