在 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 变量。

本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。

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

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

本文为协同翻译文章,如您发现瑕疵请点击「改进」按钮提交优化建议
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 0
(= ̄ω ̄=)··· 暂无内容!

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!