Найти последнюю итерацию цикла foreach в Laravel blade

в шаблоне лезвия я использую метод last (), чтобы найти последнюю итерацию цикла foreach:

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

все в порядке? Возможно, есть способ сделать то же самое в стиле Laravel?

5 ответов


Что касается Laravel 5.3+, вы можете использовать $ loop переменная

$loop->last

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

что вы делаете, это абсолютно нормально, если вы хотите получить экземпляр последнего элемента в коллекции.

кроме того, в Laravel 5.3 вы можете использовать $loop переменная, которая позволяет получить логическое значение для последней итерации $loop->last или получить текущий индекс итерации $loop->iteration общее количество записей $loop->count и Переменная Цикла

@foreach ($posts as $post)

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

@endforeach

если $colors Это Collection, $colors->last() и end($colors) как работает


Не знаю, работает ли этот последний метод, но если нет, попробуйте следующее:

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

@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