У меня есть цикл @foreach в шаблоне Blade, и мне нужно применить специальное форматирование к первому элементу в коллекции. Как добавить условие, чтобы проверить, является ли это первым элементом?
@foreach($items as $item)
<h4>{{ $item->program_name }}</h4>
@endforeach`
SoHo,
Самый быстрый способ — сравнить текущий элемент с первым элементом в массиве:
@foreach($items as $item)
@if ($item == reset($items )) First Item: @endif
<h4>{{ $item->program_name }}</h4>
@endforeach
Иначе, если это не ассоциативный массив, вы можете проверить значение индекса согласно ответу выше — но это не сработает, если массив ассоциативный.
Ларавел 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
Просто возьмите ключ
@foreach($items as $index => $item)
@if($index == 0)
...
@endif
<h4>{{ $item->program_name }}</h4>
@endforeach
Основная проблема с ответом Лиама Уилтшира — это производительность, потому что:
сброс ($ элементы) перемотать указатель $ пункты сбор снова и снова в каждом цикле … всегда с тем же результатом.
И то и другое $ пункт и результат сброса ($ пункт) объекты, так $ 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-кодирования двойных кавычек вокруг специальный строка.
С уважением.
Чтобы получить первый элемент коллекции в Laravel, вы можете использовать:
@foreach($items as $item)
@if($item == $items->first()) {{-- first item --}}
<h4>{{$item->program_name}}</h4>
@else
<h5>{{$item->program_name}}</h5>
@endif
@endforeach