J'ai une boucle @foreach dans le modèle Blade et je dois appliquer un formatage spécial au premier élément de la collection. Comment puis-je ajouter une condition pour vérifier s'il s'agit du premier élément?
@foreach($items as $item)
<h4>{{ $item->program_name }}</h4>
@endforeach`
SoHo,
Le moyen le plus rapide consiste à comparer l'élément en cours avec le premier élément du tableau:
@foreach($items as $item)
@if ($item == reset($items )) First Item: @endif
<h4>{{ $item->program_name }}</h4>
@endforeach
Sinon, si ce n'est pas un tableau associatif, vous pouvez vérifier la valeur d'index selon la réponse ci-dessus - mais cela ne fonctionnerait pas si le tableau était associatif.
Laravel 5.3 fournit une variable $loop
dans des boucles 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
Il suffit de prendre la valeur clé
@foreach($items as $index => $item)
@if($index == 0)
...
@endif
<h4>{{ $item->program_name }}</h4>
@endforeach
Le problème majeur de la réponse de Liam Wiltshire est la performance parce que:
reset ($ items) rembobine le pointeur de $ items collection encore et encore à chaque boucle ... toujours avec le même résultat.
Les deux $ item et le résultat de reset ($ item) sont des objets, donc $ item == reset ($ items) nécessite une comparaison complète de ses attributs ... demandant davantage de processeurs temps.
Une manière plus efficace et élégante de faire cela -comme le suggère Shannon s- est d'utiliser la boucle $ de la lame variable:
@foreach($items as $item)
@if ($loop->first) First Item: @endif
<h4>{{ $item->program_name }}</h4>
@endforeach
Si vous souhaitez appliquer un format spécial au premier élément, vous pourriez peut-être faire quelque chose comme (en utilisant l'opérateur conditionnel ternaire?: ):
@foreach($items as $item)
<h4 {!! $loop->first ? 'class="special"': '' !!}>{{ $item->program_name }}</h4>
@endforeach
Notez l'utilisation des balises {!!
et !!}
au lieu de la notation {{
}}
pour éviter l'encodage HTML des guillemets autour despécialstring.
Cordialement.