在 Laravel 模板 foreach 循环中使用 $loop 魔术方法 
                            
                                                    
                        
                    
                    
  
                    
                    
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>以上代码可能看起来有点复杂,但是我们仅仅只是用 parent 的 iteration 来作为列子,下面是上面代码的输出:

希望你能在现有项目中使用 $loop 变量。
本文中的所有译文仅用于学习和交流目的,转载请务必注明文章译者、出处、和本文链接
我们的翻译工作遵照 CC 协议,如果我们的工作有侵犯到您的权益,请及时联系我们。
 
           
             
             
             
             
             
             
             
                     
                     
                         
           
           关于 LearnKu
                关于 LearnKu
               
                     
                     
                     粤公网安备 44030502004330号
 粤公网安备 44030502004330号 
 
推荐文章: