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

Laravel Blade中foreach循环计数器不递增如何解决

问题原因

你将$counter = 1的初始化逻辑写在了@foreach循环体内部,每一轮循环启动时都会执行这行赋值语句,把计数器强制重置为1。即使你在循环末尾对$counter做了+1操作,下一轮循环开头立刻就会把值覆盖回1,最终所有迭代输出的计数器值永远是1。

解决方法

优先使用Blade内置的$loop变量(官方推荐,无额外维护成本)

Laravel Blade的@foreach指令原生提供了$loop实例变量,不需要手动定义计数器,直接读取属性即可拿到当前迭代的序号:

  • $loop->iteration:当前循环的迭代计数,从1开始递增,完全匹配你生成1、2、3...序号的需求
  • $loop->index:当前循环的索引值,从0开始递增,适合需要0起始序号的场景

修改后的可直接运行的代码如下:

<div id="dynamic_field">
    @foreach($niloufars as $niloufar)
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <span class="text-danger force-required"></span>
                    <label for="niloufar_name">Title</label>
                    <input type="text"
                        class="form-control"
                        name="niloufar_name_{{ $loop->iteration }}" value="{{ $niloufar->name }}">
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    <span class="text-danger force-required"></span>
                    <label for="niloufar_link">Link</label>
                    <input type="text"
                        class="form-control"
                        name="niloufar_link_{{ $loop->iteration }}" value="{{ $niloufar->link }}">
                </div>
            </div>
        </div>  
    @endforeach
</div>

上述代码渲染后会自动生成带连续序号的name属性,不会出现重复值。

手动维护计数器(仅作原理演示,不推荐生产环境使用)

如果一定要自行实现计数器逻辑,必须把计数器的初始化语句移到@foreach循环外部,保证初始化逻辑只执行一次,不会被每轮循环重置:

<div id="dynamic_field">
    {{-- 计数器初始化放在循环外,仅执行一次 --}}
    @php 
        $counter = 1;
    @endphp
    @foreach($niloufars as $niloufar)
        <div class="row">
            <div class="col-md-6">
                <div class="form-group">
                    <span class="text-danger force-required"></span>
                    <label for="niloufar_name">Title</label>
                    <input type="text"
                        class="form-control"
                        name="niloufar_name_{{ $counter }}" value="{{ $niloufar->name }}">
                </div>
            </div>
            <div class="col-md-6">
                <div class="form-group">
                    <span class="text-danger force-required"></span>
                    <label for="niloufar_link">Link</label>
                    <input type="text"
                        class="form-control"
                        name="niloufar_link_{{ $counter }}" value="{{ $niloufar->link }}">
                </div>
            </div>
        </div>  
        @php
            $counter++;
        @endphp
    @endforeach
</div>

手动维护计数器容易因初始化位置错误、作用域混淆产生隐蔽bug,除非有特殊定制需求,否则优先使用框架内置的$loop变量实现迭代计数。

内容的提问来源于stack exchange,提问作者Pouya Vaghefi

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 16:06:14