我试图理解为什么以下内容总是返回 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"
。
有人可以解释为什么会发生这种情况,因为我不明白。
返回true
时,each
方法不会停止迭代。但是,当返回false
时,它确实会停止。
如果你想停止迭代这些项目,你可以从回调中返回 false:
收集方法 - each((
您的方法也只返回false
。
如果您尝试验证所有交易都在某个日期范围内,请使用 each 方法:
// 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);
});