使用 reduce()
reduce
方法將集合減少為單個值,將每次迭代的結果傳遞給後續迭代。請參閱 reduce 方法 。
reduce
方法使用集合迴圈遍歷每個專案,併為下一次迭代生成新結果。最後一次迭代的每個結果都通過第一個引數傳遞(在以下示例中,如 $carry
)。
該方法可以對大型資料集進行大量處理。例如以下示例,我們將使用以下示例學生資料:
$student = [
['class' => 'Math', 'score' => 60],
['class' => 'English', 'score' => 61],
['class' => 'Chemistry', 'score' => 50],
['class' => 'Physics', 'score' => 49],
];
總結學生的總分
$sum = collect($student)
->reduce(function($carry, $item){
return $carry + $item["score"];
}, 0);
結果:220
說明:
$carry
是上次迭代的結果。- 第二個引數是第一輪迭代中$ carry 的預設值。這種情況下,預設值為 0
如果所有分數> = 50,請通過學生
$isPass = collect($student)
->reduce(function($carry, $item){
return $carry && $item["score"] >= 50;
}, true);
結果:false
說明:
- $ carry 的預設值為 true
- 如果所有分數都大於 50,則結果將返回 true; 如果少於 50,則返回 false。
如果得分<50,則失敗
$isFail = collect($student)
->reduce(function($carry, $item){
return $carry || $item["score"] < 50;
}, false);
結果:true
說明:
- $ carry 的預設值為 false
- 如果任何分數小於 50,則返回 true; 如果所有分數都大於 50,則返回 false。
返回得分最高的主題
$highestSubject = collect($student)
->reduce(function($carry, $item){
return $carry === null || $item["score"] > $carry["score"] ? $item : $carry;
});
結果:[ "subject" => "English", "score" => 61 ]
說明:
-
在這種情況下不提供第二個引數。
-
$ carry 的預設值為 null,因此我們在條件中檢查它。