web-dev-qa-db-ja.com

Laravel Bladeテンプレートのコレクションの最初のアイテムにのみ何かを表示する方法

Bladeテンプレートに@foreachループがあり、コレクションの最初のアイテムに特別なフォーマットを適用する必要があります。これが最初の項目であるかどうかを確認する条件を追加するにはどうすればよいですか?

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

ソーホー、

最も簡単な方法は、現在の要素を配列の最初の要素と比較することです。

@foreach($items as $item)
    @if ($item == reset($items )) First Item: @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach

または、連想配列でない場合は、上記の回答に従ってインデックス値を確認できますが、配列が連想配列の場合は機能しません。

9
Liam Wiltshire

Laravel 5.3は、foreachループで$loop変数を提供します。

@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

54

キーバリューを取るだけ

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

リアム・ウィルトシャーの答えの主な問題はパフォーマンスです。

  1. reset($ items)$ itemsコレクションのポインターを各ループで何度も巻き戻す...常にそれから同じ結果で。

  2. $ itemreset($ item)の結果はオブジェクトであるため、$ item == reset($ 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

special stringの前後の二重引用符のhtmlエンコードを回避するために、{!!!!}表記の代わりに{{および}}タグの使用に注意してください。

よろしく。

1
Omar Vargas