如何排除foreach循环中的项目

How to exclude items in foreach loop

我试图在我的 laravel 页面上显示一组特定的引用,方法是遍历 foreach 循环并使用 @class 循环奇数/循环偶数来设置奇数和偶数迭代的不同样式。

然而,当我用 @if 开始 foreach 循环时,只有一些进入循环而一些被跳过,这弄乱了我的奇数/偶数(例如 #1、#2 和 #4 进入循环循环,这意味着我有两个元素的样式为循环偶数。

我怎样才能跳过那些没有进入循环的那些,以便我可以使用交替样式显示结果?

@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

正如您所说,并非每个循环迭代都会打印 <div> 元素,因此 $loop->even$loop->odd 变量在您实施该特定逻辑的情况下无效。但是,有很多方法可以实现您想要的。我想到的第一种方法是为此使用特定的计数器,即:

@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