Laravel5.3 中新的循环变量 $loop

教程 lanceWan ⋅ 于 2016-08-22 14:20:00 ⋅ 最后回复由 Aufree 2016-09-18 17:06:13 ⋅ 1397 阅读

Laravel 5.3 发布临近,大体构建已经完成,文档整理也已经发布,一些新特性还待研究,柿子先赶软的捏 :smile:,先讲一个简单的特性,后面陆续会在我的博客上面更新~
在Laravel5.3中@foreach循环和原生PHP的函数一样,$loop循环变量是一个stdClass对象提供关于你目前在循环中的元信息。看一看它所公开的属性:

  • $loop->index: 当前循环迭代的索引(从0开始)
  • $loop->iteration: 当前的循环迭代(从1开始)
  • $loop->remaining: 剩下的迭代数量
  • $loop->count: 循环中的数据总数
  • $loop->first: 是否这是循环中的第一条数据,返回Boolean值
  • $loop->last: 是否这是循环中的最后一条数据,返回Boolean值
  • $loop->depth: 当前循环的嵌套级别
  • $loop->parent: 当在嵌套循环中,父的循环变量

通过上面属性的介绍,用Laravel5.3简单的例子展示一下:

  • HomeController
public function index()
{
    $users = factory('App\User',10)->make();
    $pages = collect([
        ['name' => 'page1','children' => []],
        ['name' => 'page2','children' => ['name' => 'page6']],
        ['name' => 'page3','children' => []],
        ['name' => 'page4','children' => ['name' => 'page7']],
        ['name' => 'page5','children' => []],
    ]);
    return view('home')->with(compact('users','pages'));
}
  • view(home.blade.php)

@extends('layouts.app')

@section('content')
<div class="container">
    <div class="row">
        <div class="col-md-8 col-md-offset-2">
            <div class="panel panel-default">
                <div class="panel-heading">Dashboard</div>
                <div class="panel-body">
                    <ul>
                    @foreach ($users as $user)
                        @if($loop->first || $loop->last)
                            <li>
                                {{ $loop->index }}: {{ $user->name }}---{{$user->email}}
                            </li>
                        @else
                        <li>
                            剩下{{$loop->remaining}}个用户没有输出,当前迭代:{{$loop->iteration}},总共{{$loop->count}}个用户== {{ $loop->index }}: {{ $user->name }}---{{$user->email}}
                        </li>
                        @endif
                    @endforeach
                    </ul>
                    <hr>
                    <ul>
                    @foreach ($pages as $page)
                        <li>
                            当前index:{{ $loop->index }}: {{ $page['name'] }},当前level:{{$loop->depth}}
                            @if($page['children'])
                            <ul>
                                @foreach($page['children']  as $child)
                                <li>
                                    父级index:{{$loop->parent->index}},当前index:{{$loop->index}}:{{$child}},当前level:{{$loop->depth}}
                                </li>
                                @endforeach
                            </ul>
                            @endif
                        </li>
                    @endforeach
                    </ul>
                </div>
            </div>
        </div>
    </div>
</div>
@endsection

界面展示:

That's it!

本帖已被设为精华帖!
本帖由 Summer 于 7个月前 加精
回复数量: 6
  • Summer MOD A Life-long learner.
    2016-08-22 21:34:12

    很详细,赞一个

  • zgldh
    2016-08-24 00:23:32

    有用。 再也不需要自己定义一个index做索引了。

  • jeffyer
    2016-08-29 17:28:03

    例子很全 :+1:

  • lanceWan 走得慢,但不后退...
    2016-08-29 17:29:52

    @jeffyer 谢谢~

  • tonyboy
    2016-09-06 20:00:26

    wow,可以节省很多代码

  • Aufree 混迹于 GitHub(Aufree)微博(@李锦发)
    2016-09-18 17:06:13

    信息蛮全的 :+1:

暂无评论~~
  • 请注意单词拼写,以及中英文排版,参考此页
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`, 更多语法请见这里 Markdown 语法
  • 支持表情,使用方法请见 Emoji 自动补全来咯,可用的 Emoji 请见 :metal: :point_right: Emoji 列表 :star: :sparkles:
  • 上传图片, 支持拖拽和剪切板黏贴上传, 格式限制 - jpg, png, gif
  • 发布框支持本地存储功能,会在内容变更时保存,「提交」按钮点击时清空
Ctrl+Enter