Как отобразить что-то только для первого элемента из коллекции в шаблоне 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
просто возьмите значение ключа
@foreach($items as $index => $item)
@if($index == 0)
...
@endif
<h4>{{ $item->program_name }}</h4>
@endforeach
основная проблема с ответом Лиама Уилтшира-это производительность, потому что:
сброс ($items) перемотать указатель $items коллекция снова и снова в каждом цикле... всегда с тем же результатом.
и $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