在Laravel Blade中查找foreach循环的最后一次迭代

64

在 Blade 模板中,我使用 last() 方法来查找 foreach 循环的最后一次迭代:

@foreach ($colors as $k => $v)
   <option value={!! $v->id !!} {{ $colors->last()->id==$v->id ? 'selected':'' }} > {!! $v->name !!} </option>
@endforeach

可以吗?也许有一种 Laravel 风格的方式来实现相同的功能?

5个回答

187

对于 Laravel 5.3+,您可以使用$loop变量。

$loop->last

@foreach ($colors as $k => $v)
     @if($loop->last)
         // at last loop, code here
     @endif
@endforeach

2
你可能需要更正if条件语句,应该使用括号而不是双花括号 :) - andersevenrud
@andersevenrud 双大括号在 if 条件语句中并不是必需的,这样也可以完美地工作。 - Mohamed Raza

8
您所做的完全正确,如果您想获取集合中最后一项的实例。
此外,在Laravel 5.3中,您可以使用$loop变量,它允许您获取布尔值以进行最后一个迭代$loop->last或获取当前迭代索引$loop->iteration,记录的总数$loop->count和更多信息。请参阅The Loop Variable
@foreach ($posts as $post)

    {{ $post->title }} ({{ $loop->iteration }} of {{ $loop->count }})   

@endforeach

另外,我认为值得一提的是$loop->last这一部分本身,它解决了这个问题的主要问题。 - kefir500

3
@foreach ($colors as $v)
    <option value={!! $v->id !!} {!!($v == end($colors)) ? 'selected="selected"' : '' !!} > {!! $v->name !!} </option>
@endforeach

或者
@foreach ($colors as $v)
    <option value={!! $v->id !!} {{($v == end($colors)) ? 'selected="selected"' : '' }} > {!! $v->name !!} </option>
@endforeach

3
如果$colors是一个Collection,那么$colors->last()end($colors)都能工作。

2

不知道最后一种方法是否有效,如果无效,请尝试以下方法:

@foreach ($colors as $v)
<option value={!! $v->id !!} @if($v == end($colors)) 'selected' @endif > {!! $v->name !!} </option>
@endforeach

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接