Laravel - 获取 @foreach 中的最后一个元素

4
基本上,我正在从StaticPagesControllerabout.blade.php传递一个变量employees。在循环遍历@foreach时,我希望代码知道是否是最后一个元素,以便输出员工的姓名而不带逗号。这两个方法都不起作用。
@foreach($employees as $employee) 
    @if($employee == end($employees))
        {{ $employee->first_name }} {{ $employee->last_name }}
    @else
        {{ $employee->first_name }} {{ $employee->last_name }}, 
    @endif
@endforeach

enter code here

2.

@foreach($employees as $employee) 
    @if($employees->last())
        {{ $employee->first_name }} {{ $employee->last_name }}
    @else
        {{ $employee->first_name }} {{ $employee->last_name }}, 
    @endif
@endforeach
3个回答

6

自Laravel 5.3以来,变得更加容易:您可以在所有的@foreach中使用$loop变量:

https://laravel.com/docs/5.3/blade#the-loop-variable

@foreach($employees as $employee)

   @if ($loop->last)
      // This is the last iteration.
      {{ $employee->first_name }} {{ $employee->last_name }}
   @else
      {{ $employee->first_name }} {{ $employee->last_name }},  
   @endif

@endforeach

一种更简短的选择是:
@foreach($employees as $employee)
   {{ $employee->first_name }} {{ $employee->last_name }}{{ ($loop->last ? '' : ',') }}
@endforeach

请注意,$loop->first也是存在的。

4

以下是您可能需要的代码:

@foreach($employees as $employee) 
    @if($employees->last() === $employee)
        {{ $employee->first_name }} {{ $employee->last_name }}
    @else
        {{ $employee->first_name }} {{ $employee->last_name }}, 
    @endif
@endforeach

在这里,我正在比较last()员工和当前的$employee。当它到达最后一个$employee时,它将与last()相同。


2

据我所知,你的代码逻辑是将每个元素的值与最后一个元素的值进行比较,以确定它是否为最后一个元素并避免出现尾随逗号。

如果有两个人具有完全相同的细节,其中一个恰好是最后一个,则可能会渲染出部分列表。

我建议您使用for循环而不是foreach,并比较元素索引而不是值。 代码如下:

@for ($i = 0; $i < count($employees); $i++)
    @if ($i + 1 < count($employees))
        {{ $employees[$i]->first_name }} {{ $employees[$i]->last_name }},
    @else
        {{ $employees[$i]->first_name }} {{ $employees[$i]->last_name }}
    @endif
@endfor

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