我在Blade模板中有一个@foreach循环,需要对集合中的第一个项目应用特殊格式。如何添加条件以检查这是否是第一项?
@foreach($items as $item)
<h4>{{ $item->program_name }}</h4>
@endforeach`
答案 0 :(得分:49)
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
答案 1 :(得分:9)
的SoHo,
最快的方法是将当前元素与数组中的第一个元素进行比较:
@foreach($items as $item)
@if ($item == reset($items )) First Item: @endif
<h4>{{ $item->program_name }}</h4>
@endforeach
或者,如果它不是关联数组,您可以根据上面的答案检查索引值 - 但如果数组是关联的,则无法工作。
答案 2 :(得分:3)
只需输入键值
即可@foreach($items as $index => $item)
@if($index == 0)
...
@endif
<h4>{{ $item->program_name }}</h4>
@endforeach
答案 3 :(得分:2)
Laravel 7。 *提供了first()
辅助功能。
{{ $items->first()->program_name }}
*请注意,我不确定何时引入。因此,它可能不适用于早期版本。
documentation here中仅作了简要介绍。
答案 4 :(得分:1)
Liam Wiltshire的答案主要是表现因为:
重置($ items)在每个循环中一次又一次地倒回 $ items 集合的指针...总是会有相同的结果。
$ item 和重置($ item)的结果都是对象,因此 $ item == reset($ items)需要对其属性进行全面比较......需要更多的处理器时间。
更有效和更优雅的方式 - ,因为香农建议 s-是使用Blade的 $ 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编码/ em> string。
问候。
答案 5 :(得分:1)
如果只需要第一个元素,则可以在@break
或@foreach
内使用@if
。请参见示例:
@foreach($media as $m)
@if ($m->title == $loc->title) :
<img class="card-img-top img-fluid" src="images/{{ $m->img }}">
@break
@endif
@endforeach
答案 6 :(得分:1)
从 Laravel 7.25 开始,Blade 现在包含一个新的 @once 组件,所以你可以这样做:
@foreach($items as $item)
@once
<h4>{{ $item->program_name }}</h4> // Displayed only once
@endonce
// ... rest of looped output
@endforeach
答案 7 :(得分:-2)
要在Laravel中获取集合的第一个元素,您可以使用:
@foreach($items as $item)
@if($item == $items->first()) {{-- first item --}}
<h4>{{$item->program_name}}</h4>
@else
<h5>{{$item->program_name}}</h5>
@endif
@endforeach