我试图理解为什么以下内容总是返回 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"
。
有人可以解释为什么会发生这种情况吗,因为我不明白。
当返回
each
时,true
方法不会停止迭代。然而,当返回 false
时,它确实会停止。
如果您想停止迭代项目,您可以从回调中返回 false:
你的方法也只返回
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);
});