Laravel - 获取@foreach 的最后一个元素
Laravel - Get the Last Element of @foreach
基本上,我将变量 employees 从 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
这是您可能需要的代码:
@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
从 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 也存在。
基本上,我将变量 employees 从 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
这是您可能需要的代码:
@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
从 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 也存在。