Bladeテンプレートに@foreachループがあり、コレクションの最初のアイテムに特別なフォーマットを適用する必要があります。これが最初の項目であるかどうかを確認する条件を追加するにはどうすればよいですか?
@foreach($items as $item)
<h4>{{ $item->program_name }}</h4>
@endforeach`
ソーホー、
最も簡単な方法は、現在の要素を配列の最初の要素と比較することです。
@foreach($items as $item)
@if ($item == reset($items )) First Item: @endif
<h4>{{ $item->program_name }}</h4>
@endforeach
または、連想配列でない場合は、上記の回答に従ってインデックス値を確認できますが、配列が連想配列の場合は機能しません。
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
キーバリューを取るだけ
@foreach($items as $index => $item)
@if($index == 0)
...
@endif
<h4>{{ $item->program_name }}</h4>
@endforeach
リアム・ウィルトシャーの答えの主な問題はパフォーマンスです。
reset($ items)$ itemsコレクションのポインターを各ループで何度も巻き戻す...常にそれから同じ結果で。
$ itemとreset($ 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エンコードを回避するために、{!!
!!}
表記の代わりに{{
および}}
タグの使用に注意してください。
よろしく。