Comment exclure des éléments dans la boucle foreach
J'essaie d'afficher un ensemble spécifique de références sur ma page laravel en parcourant une boucle foreach et en stylisant différemment les itérations impaires et paires avec @class loop odd / loop even.
Cependant, lorsque je commence la boucle foreach avec un @if, seuls certains entrent dans la boucle tandis que d'autres sont ignorés, ce qui gâche mon impair / pair (par exemple, # 1, # 2 et # 4 entrent dans la boucle, ce qui signifie que je avoir deux éléments stylés avec une boucle paire.
Comment puis-je ignorer ceux qui n'entrent pas dans la boucle afin de pouvoir afficher le résultat avec un style alternatif?
@foreach ($references as $reference )
@if(isset($reference['is_startpage'])
&& $reference['is_startpage']!= 1
&& isset($reference['content']['featured'])
&& $reference['content']['featured'] == 1)
<div @class([
'row py-5' => $loop->odd,
'row flex-row-reverse py-5'=> $loop->even,
])></div>
@endif
@endforeach
Solution du problème
Comme vous le dites, toutes les itérations de boucle n'impriment pas l' <div>
élément, donc $loop->even
et $loop->odd
les variables ne sont pas valides dans votre cas pour implémenter cette logique spécifique. Cependant, il existe de nombreuses façons d'obtenir ce que vous voulez. La première façon qui me vient à l'esprit est d'utiliser un compteur spécifique pour cela, c'est-à-dire :
@php $featuredCount = 0; @endphp
@foreach ($references as $reference)
@if(
isset($reference['is_startpage'])
&& $reference['is_startpage']!= 1
&& isset($reference['content']['featured'])
&& $reference['content']['featured'] == 1
)
@php $featuredCount++; @endphp
<div @class([
'row py-5', // These two are always present, no need to conditionally rewrite them
'flex-row-reverse' => $featuredCount % 2 == 0, // 'Even' check
])></div>
@endif
@endforeach
Commentaires
Enregistrer un commentaire