如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?
Posted
技术标签:
【中文标题】如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?【英文标题】:How to use break or continue with Laravel Eloquent Collection's each method? 【发布时间】:2015-06-25 21:06:36 【问题描述】:如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue。 我的代码是这样的:
$objectives->each(function($objective)
Collection::make($objective)->each(function($action)
Collection::make($action)->each(function($success_indicator)
Collection::make($success_indicator)->each(function($success_indicator)
echo 'hi';
continue;
);
);
);
);
【问题讨论】:
作为break
的解决方法,您可以在收集时使用first
方法。当您返回第一个 true
结果时,它将停止迭代。但最好向我们展示你真正想要做什么,为什么你需要这个break
和continue
。
在某些情况下,我们可以使用exit();
代替 continue ,return true; return true; 解决方案如下所示。
【参考方案1】:
就我而言,它正在按我的意愿工作。我检查了上面提到的所有代码。但不工作。请注意,我的版本是 Laravel -5.5
return collect($models->items())->each(function ($item, $index)
if( !$item->quoteReturnDetail) echo $item ; exit(); );
【讨论】:
【参考方案2】:我们可以返回true/false true
for continue
, false
for break
继续:
collect([1,2,3,4])->each(function ($item)
if ($item === 2)
return true;
echo $item;
);
输出: 1 3 4
休息:
collect([1,2,3,4])->each(function ($item)
if ($item === 2)
return false;
echo $item;
);
输出: 1
【讨论】:
实际上你可以只用return;
换成continue
,因为要做到break
,你需要显式返回false
。
不工作 .. return collect($models->items())->each(function ($item, $index) if( $item->quoteReturnDetail) return false; echo "测试"; );【参考方案3】:
到continue
, 只是return
出了内部函数。给break
,嗯..
如果你使用的是 Laravel 5.1+,你可以返回 false
来打破循环:
$objectives->each(function($objective)
collect($objective)->each(function($action)
collect($action)->each(function($success_indicator)
collect($success_indicator)->each(function($success_indicator)
if ($condition) return false;
);
);
);
);
对于旧版本的 Laravel,使用常规的 foreach
循环:
$objectives->each(function($objective)
foreach ($objective as $action)
foreach ($action as $success_indicators)
foreach ($success_indicators as $success_indicator)
echo 'hi';
break;
);
【讨论】:
例如文档5.6 只是说明如何break
out: laravel.com/docs/5.6/collections#method-each 而不是如何跳过当前项目。
@Roland 跳过,只是return
什么都没有。将退出函数的当前调用,并继续循环中的下一项。以上是关于如何在 Laravel Eloquent Collection 的 each 方法中使用 break 或 continue?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Laravel 5.8 中使用 Eloquent 进行查询?
如何使用 Eloquent 在 Laravel 中开始查询?