如果 if 条件为true,我需要在 foreach 中打破 if 语句。是否可以在不破坏 foreach 的情况下打破 if 语句?
下面显示了我目前正在使用的代码。但是,如果我这样做,它也打破了foreach。
码
@foreach($furniture as $fur)
{
//do something
@if($fur->broken == true)
//do something
<php break; ?>
@endif
}
@endforeach
答案 0 :(得分:2)
我会在foreach中使用do do
foreach($furniture as $fur){
//do something
do{
if($fur->broken == true){
//do something
break;
}
}while(false);
}
另一种方法是使用带有if的switch语句。
foreach($furniture as $fur){
//do something
switch(1){
default:
if($fur->broken == true){
//do something
break;
}
}
}
另请注意,要突破foreach,您可以break 2
而不仅仅break
。
所有这一切,我只想从最佳实践的角度来看,这会使代码的可读性降低,如果没有它(最有可能),你需要做什么,但我需要更多的细节来帮助解决这个问题。
<强>更新强>
这是一个模板之类的东西(Blade)吗?这个问题并不清楚。我不使用刀片,但我已经看过了,研究了一些,所以这对@
符号来说是有意义的。但是当我花时间打字时,我会留在这里。
值得注意的是,通过在foreach中伪造一个循环(循环1次),可以在刀片中完成可能,这与do while相同。假设它支持中断级别。像这样的东西
@foreach($furniture as $fur)
//do something
@foreach($fake as $f)
@if($fur->broken == true)
//do something
@break
@endif
@endforeach
//do something else
@endforeach
//where fake is like $fake = [1]; single element, so one loop.
您也可以根据需要在if块内部或外部执行额外循环。
我也不确定Blade是否支持switch
大多数模板引擎都没有,但如果它支持它可能会更清晰。
答案 1 :(得分:1)
查看Laravel文档:https://laravel.com/docs/5.5/blade
文档示例:
@foreach ($users as $user)
@if ($user->type == 1)
@continue
@endif
<li>{{ $user->name }}</li>
@if ($user->number == 5)
@break
@endif
@endforeach
答案 2 :(得分:1)
如果不是循环结构,那么你就不能打破它#34;。
但是,你可以通过简单地调用break来打破foreach。在您的示例中,它具有所需的效果:foreach($furniture as $fur) {
//do something
if ($fur->broken == true) {
//do something
// will leave the foreach loop and also the if statement
break;
}
this_command_is_not_executed_after_a_match_is_found();
}
答案 3 :(得分:0)
使用continue
代替break
:
@foreach($furniture as $fur)
//do something
@if($fur->broken == true)
//do something
@continue
@endif
@endforeach