Lavavelのbladeテンプレート上でforeachのインデックスを取る方法

こんにちは、さるまりんです。

PHPのフレームワークLaravelのbladeテンプレートの機能をメモしておきます。

@foreachのループの中で、今、何回目なのかで処理を分岐したい。

そんな時に便利なのが$loop変数です。

こんな感じです。

@foreach ($items as $item)
  @if ($loop->index == 0)
  @endif
@endforeach

これで繰り返しの最初の一回だけの処理を指定できます。
$loop->index0始まりです。

$loopはLavael 5.3から追加されたみたいなので、それ以前のものを使っているときはこんな感じです。

<?php $index=0; ?>
@foreach ($items as $item)
  @if ($index == 0)
  @endif
  <?php $index++; ?>
@endforeach

PHPをベタで書くのちょっと抵抗あります。

この$loop変数は他にもこんな使い方ができます。

$loop->index0始まりですが、$loop->iterationだと1から始まります。

これだと順番を表示する時 $loop->index + 1とかする必要がなく、$loop->iterationそのまま表示でOKです。

こんな風に使えます。

@foreach ($items as $item)
  {{ $loop->iteration }}. {{ $item->name }}
@endforeach

上の例で繰り返しの最初の一回だけ処理をするというのをやりました。

最初と最後に関しては$loop->first$loop->lastを使って調べることもできます。

こんな感じです。

@foreach ($items as $item)
  // 最初?
  @if ($loop->first)
  @endif

  // 最後?
  @if ($loop->last)
  @endif
@endforeach

他にも$loop->remainingで繰り返しの残りの数を取れたり、$loop->countで繰り返ししている配列の要素数が取れたりします。

便利ですね〜。知っているとコードがシンプルになリました。

積極的に使っていきたいと思います。

読んでくださってありがとうございました。

それではまた!