Laravel,是否有可能打破foreach内部的陈述?

时间:2017-11-22 05:40:05

标签: php laravel

如果 if 条件为true,我需要在 foreach 中打破 if 语句。是否可以在不破坏 foreach 的情况下打破 if 语句?

下面显示了我目前正在使用的代码。但是,如果我这样做,它也打破了foreach。

@foreach($furniture as $fur)
{
  //do something
  @if($fur->broken == true)
    //do something
    <php break; ?>
  @endif
}
@endforeach

4 个答案:

答案 0 :(得分:2)

我会在foreach中使用do do

foreach($furniture as $fur){
//do something
    do{
        if($fur->broken == true){
          //do something
           break;
        }
    }while(false);
}
Do 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