73
72

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【Laravel】foreach文における$loop変数に感動した

Last updated at Posted at 2018-11-24

loop変数はLaravel5.3から追加された変数。
foreach文とかで繰り返しの「ループの最初」や「ループの5回目で」という処理を書くことがあるが...

@foreach ($users as $key => $value) {
  @if ($key === 1)
    // ループの1回目だけの処理
  @endif
}

ループ変数

foreach文の中で$loop変数を使うと、$key=>$valueにしなくてもインデックスを取ることができる。その他いろんなプロパティも持つ。

繰り返しの回数に関するプロパティ

@foreach ($users as $user)
    // 初回ループ
    @if ($loop->first)
        // 最初の繰り返し
    @endif

    @if ($loop->index === 0)
        // 最初の繰り返し(インデックスが取れる)
    @endif
    
    @if ($loop->iteration === 1)
        // 最初の繰り返し(現在の繰り返し数が取れる)
    @endif

    // 最後のループ
    @if ($loop->last)
        // 最後の繰り返し
    @endif

    @if ($loop->remaining === 1)
        // 最後の繰り返し (残りの繰り返し数が取れる)
    @endif
@endforeach

その他のプロパティ

@foreach
    // 配列の総アイテム数
    @if ($loop->count === 10)
        // 配列の総アイテム数が10
    @endif

    // 現在のループのネストレベル
    @if ($loop->depth === 1)
        // ネストレベル1
    @endif
    
    // ループがネストしてる場合に、親のループ変数を使いたい場合
    @foreach ($user->posts as $post)
        @if ($loop->parent->first)
            // 親のループの最初の繰り返し
            echo ($loop->iteration) // 1
        @endif
    @endforeach
@endforeach

$loop変数のプロパティ一覧

プロパティ 説明
$loop->index 現在のループのインデックス(初期値0)
$loop->iteration 現在の繰り返し数(初期値1)
$loop->remaining 繰り返しの残り数
$loop->count 繰り返し中の配列の総アイテム数
$loop->first ループの最初の繰り返しか
$loop->last ループの最後の繰り返しか
$loop->depth 現在のループのネストレベル
$loop->parent ループがネストしている場合、親のループ変数

まとめ

  • 統一されたものを使えば書いた人による差分が出ないので、積極的に使いたい。

参考

73
72
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
73
72

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?