如何在Laravel中输出奇数行和偶数行

14

我有一个项目,从数据库中获取帖子并在主页视图上呈现,就像一个博客。(在主页上,我将其限制为3篇文章)

表格中有6行,我想根据奇偶行来设置输出的样式。

这是我的控制器:

public function index()
{
   $counter = Post::count();
   $posts= DB::table('posts')->orderBy('id', 'DESC')->limit(3)->get();

    return view('home',compact('posts','counter')); 
}

我希望偶数行有<div class="even">标签,奇数行有<div class="odd">标签。

当我在$counter上使用dd时,我得到了值6。这是正确的。我在表格中有6行。

目前,我根据其他文章尝试的方法:

@foreach ($posts as $post)
@if($counter % 2 == 0)
<div class="even">{{$post->title}}</div>
@else
<div class="odd">{{$post->title}}</div>
@endif

这段代码没有实际作用,但仍会按照6、5、4、3、2、1的顺序输出行。

那么我应该如何在foreach循环中编写IF语句来表达......

if ($counter == odd)
<div class="odd">
else
<div class="even">

我要找的顺序是:

  • 奇数
  • 偶数
  • 奇数
  • 偶数
3个回答

27

$counter是静态变量,因此调用$counter % 2 == 0将始终显示相同的结果。

如果您使用的是Laravel 5.4+,则在@foreach()中包括一个$loop变量。因此,您可以在循环内访问mod除法。

这里是Laravel 5.4+的示例:

@foreach ($posts as $post)
    @if($loop->iteration % 2 == 0)
        <div class="even">{{$post->title}}</div>
    @else
        <div class="odd">{{$post->title}}</div>
    @endif
@endforeach

我正在使用5.7版本。之前不知道$loop变量,但它确实很好用。在这种情况下,$counter就不需要了,对吗? - daugaard47
没错,$loop 应该可以处理它。当我发现 $loop 这个东西时,我升级到了 5.4 版本。它经常派上用场。 - N Mahurin
style="background:{{ $loop->iteration % 2 == 0 ? '#FEFEFE' : '#FFF' }}" 的程序相关内容。 - hiDemo Studio

22

Laravel 5.8.5在Blade循环变量中添加了even和odd布尔标志

现在您可以使用:

$loop->even 或 $loop->odd

而不是

$loop->iteration % 2

参考链接


3
你需要在每次迭代中递增计数器。原始回答翻译成"最初的回答"。
@php
  $counter = 1;
@endphp

@foreach ($posts as $post)
  @if($counter % 2 == 0)
   <div class="even">{{$post->title}}</div>
  @else
   <div class="odd">{{$post->title}}</div>
  @endif
  @php 
   $counter++;
  @endphp
@endforeach

这也可以工作,但是在我看来$loop变量更加简洁。感谢帮助。 - daugaard47

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接