Как отобразить что-то только для первого элемента из коллекции в шаблоне Laravel Blade

У меня есть цикл @foreach в шаблоне лезвия и нужно применить специальное форматирование к первому элементу в коллекции. Как добавить условие, чтобы проверить, является ли это первым элементом?

@foreach($items as $item)
    <h4>{{ $item->program_name }}</h4>
@endforeach`

5 ответов


Сохо,

самый быстрый способ, чтобы сравнить текущий элемент с первым элементом в массиве:

@foreach($items as $item)
    @if ($item == reset($items )) First Item: @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach

или иначе, если это не ассоциативный массив, вы можете проверить значение индекса в соответствии с ответом выше, но это не сработает, если массив является ассоциативным.


фреймворк Laravel 5.3 делает $loop переменная, доступная внутри foreach петли.

С переменной цикла вы можете сделать:

@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif

    @if ($loop->last)
        This is the last iteration.
    @endif

    <p>This is user {{ $user->id }}</p>
@endforeach

Docs:https://laravel.com/docs/5.3/blade#the-loop-variable


просто возьмите значение ключа

@foreach($items as $index => $item)
    @if($index == 0)
        ...
    @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach

основная проблема с ответом Лиама Уилтшира-это производительность, потому что:

  1. сброс ($items) перемотать указатель $items коллекция снова и снова в каждом цикле... всегда с тем же результатом.

  2. и $item и в результате сброс ($item) объекты, так $ item == сброс ($items) требует полного сравнения его атрибутов... требующий больше процессорного времени.

более эффективный и элегантный способ сделать это -как Шеннон предложилs-использовать лезвие $loop переменной:

@foreach($items as $item)
    @if ($loop->first) First Item: @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach

если вы хотите применить специальный формат к первому элементу, то, возможно, вы могли бы сделать что-то вроде (используя троичный условный оператор ?: ):

@foreach($items as $item)
    <h4 {!! $loop->first ? 'class="special"': '' !!}>{{ $item->program_name }}</h4>
@endforeach

обратите внимание на использование {!! и !!} теги вместо {{ }} обозначение для избегайте HTML-кодирования двойных кавычек вокруг специальные


чтобы получить первый элемент коллекции в Laravel, вы можете использовать:

@foreach($items as $item)
    @if($item == $items->first()) {{-- first item --}}
        <h4>{{$item->program_name}}</h4>
    @else
        <h5>{{$item->program_name}}</h5>
    @endif
@endforeach