ループの記述方法
条件分岐の次はループです。
ループも@を付与する
ループの記述も条件分岐同様、通常のPHPコードの前に@を付与したディレクティブを使います。例えば、forループは以下の記述になります。
<ol>
@for($i = 1; $i <= 5; $i++)
<li>{{$i}}個目</li>
@endfor
</ol>
@endforの記述を忘れなければ、forの()内の記述は通常のPHPコードと同じです。
同じようにforeachも使えます。ここでは、ルーティング登録のコールバック関数内で、例えば、以下の連想配列をテンプレートに渡すとします。
$data["resultList"] = ["A"=>"田中", "B"=>"中野", "C"=>"野村"];
この連想配列をforeachでループさせながら表示する記述は、以下のようになります。
<ul>
@foreach($resultList as $key => $value)
<li>{{$key}}は{{$value}}です</li>
@endforeach
</ul>
foreachでも()内の記述は通常のPHPコードと同じです。
さらに、whileループも使えます。例えば、以下のコードです。
@while(true) <p>無限ループ</p> @endwhile
このコードは、無限ループになってしまいますね。
ループ中の変数$loop
Bladeでループディレクティブを使う場合、ループ内だけ$loopという特殊な変数が使えます。この変数を使うと、現在のループに関するさまざまな値を取り出すことができます。表1にどのような値が取り出せるかまとめておきます。
| 記述 | 取得できる値 |
|---|---|
| $loop->iteration | 現在の繰り返し回数(1始まり)。 |
| $loop->index | いわゆるインデックス値。0始まりの値で、繰り返し回数を-1したもの。 |
| $loop->remaining | 残りの繰り返し回数。 |
| $loop->count | ループ対象の配列の要素数。 |
| $loop->first | 最初の繰り返しかどうか。 |
| $loop->last | 最後の繰り返しかどうか。 |
| $loop->depth | ループの入れ子(ネスト)の階層数。 |
| $loop->parent | ループが入れ子になっている場合、親ループの$loop変数。 |
これらの変数を使って、例えばリスト9のように記述することが可能です。
~省略~
<ul>
@foreach($resultList as $key => $value)
<li>
@if($loop->first)
ループの始まりです。<br>
@endif
{{$loop->iteration}}回目: {{$key}}は{{$value}}です。
@if($loop->last)
<br>ループの終わりです。
@endif
</li>
@endforeach
</ul>
~省略~
このテンプレートに対してルーティングコールバック関数で以下の連想配列を渡してあげるとします。
$data["resultList"] = ["A"=>"田中", "B"=>"中野", "C"=>"野村", "D"=>"村井", "E"=>"井田"];
すると、実行結果としては、図5のようになります。
まとめ
今回は、Laravelのビューの扱いとして、テンプレートエンジンBladeの使い方とその連携方法を紹介しました。
次回は、Laravelでルーティングを登録する別の方法を紹介します。現在は、コールバック関数によるルーティング登録しか行っていませんが、クラスを使ったルーティング登録も可能なうえ、そちらの方がより一般的です。そのあたりを解説していきます。
