it-swarm.com.de

So zeigen Sie etwas nur für den ersten Artikel aus der Sammlung in an Laravel Blattvorlage

Ich habe eine @foreach-Schleife in der Blade-Vorlage und muss dem ersten Element in der Sammlung eine spezielle Formatierung zuweisen. Wie füge ich eine Bedingung hinzu, um zu prüfen, ob dies der erste Artikel ist?

@foreach($items as $item)
    <h4>{{ $item->program_name }}</h4>
@endforeach`
9
SoHo

SoHo,

Der schnellste Weg ist, das aktuelle Element mit dem ersten Element im Array zu vergleichen:

@foreach($items as $item)
    @if ($item == reset($items )) First Item: @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach

Oder, wenn es sich nicht um ein assoziatives Array handelt, können Sie den Indexwert gemäß der obigen Antwort überprüfen. Dies funktioniert jedoch nicht, wenn das Array assoziativ ist.

9
Liam Wiltshire

Laravel 5.3 enthält eine $loop-Variable in foreach-Schleifen. 

@foreach ($users as $user)
    @if ($loop->first)
        This is the first iteration.
    @endif

    @if ($loop->last)
        This is the last iteration.
    @endif

    <p>This is user {{ $user->id }}</p>
@endforeach

Dokumente: https://laravel.com/docs/5.3/blade#the-loop-variable

41
Shannon

Nimm einfach den Schlüsselwert

@foreach($items as $index => $item)
    @if($index == 0)
        ...
    @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach
3
Gumma Mocciaro

Das Hauptproblem bei Liam Wiltshires Antwort ist die Leistung, weil:

  1. reset ($ items) spult den Zeiger von $ items collection in jeder Schleife immer wieder zurück ... immer mit dem gleichen Ergebnis.

  2. Sowohl $ item als auch das Ergebnis von reset ($ item) sind Objekte, also $ item == reset ($ items) erfordert einen vollständigen Vergleich seiner Attribute ... und erfordert mehr Prozessor Zeit.

Eine effizientere und elegantere Methode, dies zu tun --wie Shannon s- vorschlagen - ist die $ loop -Variable des Blades:

@foreach($items as $item)
    @if ($loop->first) First Item: @endif
    <h4>{{ $item->program_name }}</h4>
@endforeach

Wenn Sie ein spezielles Format auf das erste Element anwenden möchten, können Sie Folgendes tun (mit dem ternären Bedingungsoperator?: ):

@foreach($items as $item)
    <h4 {!! $loop->first ? 'class="special"': '' !!}>{{ $item->program_name }}</h4>
@endforeach

Beachten Sie die Verwendung von {!!- und !!}-Tags anstelle der {{}}-Notation, um die HTML-Codierung der Anführungszeichen umspecialstring zu vermeiden.

Grüße.

0
Omar Vargas