Laravel Blade中foreach循环如何按迭代顺序输出$values不同元素
问题根因
当前代码的问题有两个:
- 内嵌
@for循环在每次@foreach迭代时都会重置$i=0,且输出完当前元素就立刻执行@break终止循环,因此永远只能输出$values[0] - 循环终止条件
$i < $values写法错误:$values是数组,不能直接和整数做大小比较,正确写法应为$i < count($values)
实现方法
完全不需要嵌套两层循环,Blade的@foreach原生支持获取当前迭代的索引,直接匹配$values对应下标的元素即可,逻辑更简洁不会出现变量重置问题。
写法1:显式获取循环键
@foreach ($videohistories as $index => $videohistory) <tr> <td>{{ date("Y-m-d H:i:s", $videohistory->create_time) }}</td> <td>{{ date("Y-m-d H:i:s", $videohistory->end_time) }}</td> <td>{{ diff_date_format($videohistory->begin_time, $videohistory->end_time, "%H sa %i dk. %s sn") }}</td> <td> {{ $values[$index] ?? '' }} </td> </tr> @endforeach
写法2:用Blade自带$loop变量
如果不想显式声明索引变量,可以直接用Blade循环内置的$loop->index属性(从0开始计数,和数组下标匹配):
@foreach ($videohistories as $videohistory) <tr> <td>{{ date("Y-m-d H:i:s", $videohistory->create_time) }}</td> <td>{{ date("Y-m-d H:i:s", $videohistory->end_time) }}</td> <td>{{ diff_date_format($videohistory->begin_time, $videohistory->end_time, "%H sa %i dk. %s sn") }}</td> <td> {{ $values[$loop->index] ?? '' }} </td> </tr> @endforeach
补充说明
代码里的?? ''是做容错处理,当$values对应下标不存在时输出空字符串,避免抛出数组下标不存在的报错,使用前尽量保证$values长度和$videohistories长度一致。
内容的提问来源于stack exchange,提问作者ibrahimozden
相关产品推荐
相关产品推荐

