Laravel 使用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;否则,结果将返回true。如果小于50,则返回false。
如果任何分数小于50,则使学生失败
$isFail = collect($student) ->reduce(function($carry, $item){ return $carry || $item["score"] < 50; }, false);
结果:true
说明:
$carry的默认值为false
如果任何分数小于50,则返回true;否则,返回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,因此我们在条件条件中进行检查。