28

我在 Blade 模板中有一个 @foreach 循环,需要对集合中的第一项应用特殊格式。如何添加条件来检查这是否是第一项?

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

8 个回答 正确答案


{{ $items->first()->program_name }}


12

苏豪,

最快的方法是将当前元素与数组中的第一个元素进行比较:

@foreach($items as $item)
    @if ($item == reset($items )) First Item: @endif    
    # 总感觉这里 reset 不对 ,,第一个用 current($items)  第二个用 next($items)吧
   <h4>{{ $item->program_name }}</h4> @endforeach

否则,如果它不是关联数组,您可以按照上面的答案检查索引值 - 但如果数组是关联的,那将不起作用。

86

Laravel 5.3$loopforeach循环中提供了一个变量

@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

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

6

只取键值

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

Laravel 7. * 提供了一个first()辅助函数。

{{ $items->first()->program_name }}

*请注意,我不确定这是什么时候引入的。因此,它可能不适用于早期版本。

它仅在此处文档中简要提及

3

Liam Wiltshire 回答的主要问题是性能,因为:

  1. reset($items)在每个循环中一次又一次地倒回$items集合的指针......总是具有相同的结果。

  2. 这两个$项目和结果复位($项目)都是对象,所以$项目==复位($项目),需要其属性的全面比较苛刻...更多的处理器时间。

一种更有效、更优雅的方法 -正如香农建议的那样 -是使用 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 编码

问候。

1

如果您只需要第一个元素,您可以@break在您的@foreach@if.see 示例中使用:

@foreach($media as $m)
    @if ($m->title == $loc->title) :
        <img class="card-img-top img-fluid" src="images/{{ $m->img }}">
          
        @break
    @endif
@endforeach
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
-3

要在 Laravel 中获取集合的第一个元素,您可以使用:

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

你的答案


来自 https://stackoverflow.com/questions/33922028/how-to-display-something-only-for-the-first-item-from-the-collection-in-laravel