集合中map函数的预期行为

时间:2018-03-08 09:22:03

标签: laravel collections eloquent

我正在使用map()函数对集合中的每个项目执行逻辑:

$result = $payments->map(function($payment){

         $payment = app('App\Service\Service1')::sendPayment();

         if(!payment){
            return false;
         }

         $payment = Payment::findOrFail($payment->id);
         $payment->sent_at = Carbon::now();
         $payment->save();
});

问题:

如果发送付款失败,我正在检查if语句,在这种情况下我返回false。

所以我期待当我在map()函数上返回false以跳过集合中的当前项并处理下一个项时?这是map()函数的正确行为,与each()

的区别是什么

1 个答案:

答案 0 :(得分:0)

each方法迭代集合中的项目并将每个项目传递给回调:

$collection = $collection->each(function ($item, $key) {
    //
});

如果您想停止迭代这些项目,可以从回调中返回false

$collection = $collection->each(function ($item, $key) {
    if (/* some condition */) {
        return false;
    }
});

map方法遍历集合并将每个值传递给给定的回调。回调可以自由修改项目并将其返回,从而形成一个新的修改项目集合:

$collection = collect([1, 2, 3, 4, 5]);

$multiplied = $collection->map(function ($item, $key) {
    return $item * 2;
});

$multiplied->all();

// [2, 4, 6, 8, 10]