Laraveleach() 方法

问题描述 投票:0回答:1

我试图理解为什么以下内容总是返回 false:

public function checkDate($transactions)
{
    $start = Carbon::now()->subMonth();
    $end = Carbon::now();

    $transactions->each(function ($transaction) use ($start, $end) {

        $date = Carbon::createFromFormat('Y-m-d', $transaction->date);

        if ($date->between($start, $end))
        {
            return true;
        }

        return false;
    });

    return false;
}

当我删除两个

return false
时,就会显示
null

当我使用常规的

foreach
时,它有效:

$start = Carbon::now()->subMonth();
$end = Carbon::now();

foreach($transactions as $transaction)
    {
        $date = Carbon::createFromFormat('Y-m-d', $transaction->date);

        if($date->between($start, $end))
        {
            return true;
        }

        return false;
    }

我不明白的是,当我执行以下操作时:

public function checkDate($transactions)
{
    $start = Carbon::now()->subMonth();
    $end = Carbon::now();

    $transactions->each(function ($transaction) use ($start, $end) {

        $date = Carbon::createFromFormat('Y-m-d', $transaction->date);

        if ($date->between($start, $end))
        {
            dd('test');
            return true;
        }

        return false;
    });

    return false;
}

然后会显示

"test"

有人可以解释为什么会发生这种情况吗,因为我不明白。

php laravel foreach each
1个回答
1
投票

当返回

each
时,
true
方法不会停止迭代。然而,当返回
false
时,它确实会停止。

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

集合方法 -each()

你的方法也只返回

false

如果您尝试验证某个日期范围内的所有交易,请使用 every 方法:

// returns true if all transactions date are between start and end, otherwise returns false.
return $transactions->every(function ($transaction) use ($start, $end) {
    $date = Carbon::createFromFormat('Y-m-d', $transaction->date);

    return $date->between($start, $end);
});
© www.soinside.com 2019 - 2024. All rights reserved.