如何仅显示Laravel Blade模板中集合中第一个项目的内容

时间:2015-11-25 16:46:51

标签: php laravel-5.1 laravel-blade

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

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

8 个答案:

答案 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

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

答案 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的答案主要是表现因为:

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

  2. $ item 重置($ item)的结果都是对象,因此 $ item == reset($ items)需要对其属性进行全面比较......需要更多的处理器时间。

  3. 更有效和更优雅的方式 - ,因为香农建议 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