Laravel - 获取@foreach的最后元素

时间:2016-07-23 01:12:06

标签: php foreach laravel-5.2 blade

基本上,我将变量员工 StaticPagesController 传递到 about.blade.php 循环遍历 @foreach 时,我希望代码知道它是否是最后一个元素,因此它将输出员工的名称而不包含逗号。 这些都不会起作用。

1

@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 个答案:

答案 0 :(得分:5)

自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->首先也存在。

答案 1 :(得分:3)

这是您可能需要的代码:

@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 :(得分:1)

根据我的理解,代码的逻辑是将每个元素的值与最后一个元素的值进行比较,以确定它是否是最后一个元素并避免使用尾随逗号。

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

我建议您使用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