在 Laravel 模板 foreach 循环中使用 $loop 魔术方法

Laravel

Laravel 视图所拥有的 foreach 指令是与 PHP 中使用的 foreach 方法有着同样的用法。 @foreach 比起常规的 foreach 更加强大,因为他在每一个 $foreach 循环中内置了 $loop 变量。

$loop 变量是一个 stdClass 对象,并且提供了一系列当前循环的信息。 $loop 变量包含八个十分有用的属性。

  • $loop->index 返回以 0 开始的脚标值,0 表示是第一次循环
  • $loop->iteration 返回以 1 开始的循环次数; 1 表示是第一次循环
  • $loop->remaining 剩余的循环次数; 如果总共循环次数是 10,并且当前循环是 3,那么他将会返回 7
  • $loop->count 返回循环的总次数
  • $loop->first 判断是否为第一次循环,如果是则返回 true,否则返回 false
  • $loop->last 判断是否为最后一次循环,如果是则返回 true,否则返回 false
  • $loop->depth 返回当前循环的嵌套深度,如果是双层循环则返回 2 ,再多一层就会返回 3
  • $loop->parent 如果当前循环是嵌套在其他循环中的,那么 parent  将会返回父级循环的 loop 变量。如果当前是顶级循环,那么将会返回 null

它很容易理解以及使用,所以你可以在视图文件中这样做:

@foreach($items as $item)
    @if($loop->first)
        <p>Our first element of the array</p>
    @endif

    <p>{{ $loop->iteration . '/' . $loop->count }}</p>

    @if($loop->last)
        <p>Our last element of the array</p>
    @endif
@endforeach

当你再循环中,你会得到一个 $loop 变量,你可以使用 depth 属性来得到当前的循环深度。当然,你可以使用 parent 属性来获取父级循环的 $loop 值。如果你循环很深,你可以再次使用链式调用 parent 属性获取上上层的 $loop 值。你可以看以下代码,拥有三层深度的数组。

我们先在控制器中定义如下数组并传递到视图文件。

$items = [
    '1' => [
        '1.1' => [
            '1.1.1', '1.1.2'
        ],
        '1.2' => [
            '1.2.1', '1.2.2'
        ]
    ],
    '2' => [
        '2.1' => [
            '2.1.1', '2.1.2'
        ],
        '2.2' => [
            '2.2.1', '2.2.2'
        ]
    ]
];

现在我们在循环中来使用 parent 属性。以下代码主要演示在嵌套循环中使用 parent 属性。

<ul>
    @foreach($items as $item => $value)
        <li>{{ $item }} == {{ $loop->iteration }}
            <ul>
                @foreach($value as $item_second => $value_second)
                    <li>{{ $item_second }} == {{ $loop->parent->iteration }}.{{ $loop->iteration }}
                        <ul>
                            @foreach($value_second as $value_third)
                                <li>{{ $value_third }} == {{ $loop->parent->parent->iteration }}.
                                    {{ $loop->parent->iteration }}.{{ $loop->iteration }}
                                </li>
                            @endforeach
                        </ul>
                    </li>
                @endforeach
            </ul>
        </li>
    @endforeach
</ul>

以上代码可能看起来有点复杂,但是我们仅仅只是用 parentiteration 来作为列子,下面是上面代码的输出:

loop variable in Laravel

希望你能在现有项目中使用 $loop 变量。


Practice makes perfect.

原文地址:https://tutsforweb.com/loop-variable-for...

译文地址:https://learnku.com/laravel/t/27975

《L04 微信小程序从零到发布》
从小程序个人账户申请开始,带你一步步进行开发一个微信小程序,直到提交微信控制台上线发布。
《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

社区文档:

将托管在 packagist.org 和 github.com 的扩展包使用国内 CDN 加速
GitHub Laravel 扩展包 TOP 250
速查表方便快速查询框架功能,支持手机访问,支持中英文版本
Laravel 中文文档,由社区用户翻译和维护,将会保持一直更新
此文档的目的,就是为了提高技术团队的凝聚力、一致性和生产效率。
开发环境的部署,开发者工具的选择,适用于 Mac 和 Windows。
浓缩过后的精华
Laravel Nova 后台管理面板文档的中文翻译
Lumen 中文文档,由社区用户翻译和维护,将会保持一直更新
Laravel 下知名扩展包 Dingo API 的中文文档,Laravel API 开发必知必会