You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.30 12:18:24