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

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

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

9

Решение

SoHo,

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

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

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

9

Другие решения

Ларавел 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

39

Просто возьмите ключ

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

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

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

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

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

@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-кодирования двойных кавычек вокруг специальный строка.

С уважением.

0

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

@foreach($items as $item)
@if($item == $items->first()) {{-- first item --}}
<h4>{{$item->program_name}}</h4>
@else
<h5>{{$item->program_name}}</h5>
@endif
@endforeach
-2
По вопросам рекламы [email protected]