Ich möchte überprüfen, ob mein foreach leer ist, sodass das grundlegende HTML-Markup nicht ohne Ergebnisse angezeigt wird. Ich versuche, es in eine if-Anweisung zu packen und dann, wenn es leer ist, nichts anderes zu tun, um die Foreach-Schleife zu durchlaufen.
Wenn $status->replies leer ist, warum nicht mit testen leer()?… @if (empty($status->replies)) Anstatt anzunehmen, dass es eine Zeichenfolge ist, wenn es leer ist?
@forelse($status->replies as $reply)
<p>{{ $reply->body }}</p>
@empty
<p>No replies</p>
@endforelse
Es mag alt sein, aber meine Güte, ich muss jetzt so viel Code umschreiben! Ich hatte keine Ahnung, dass es das gibt!
– Nahbyr
25. März 2018 um 22:46 Uhr
Goldene Antwort auf diesen Kerl!
– Kray
12. Februar 2020 um 5:28 Uhr
Übrigens funktioniert dies nicht zum Rendern von Tabellen, da Sie eine Tabelle ohne Zeilen (oder mit einer einzelnen Zeile) mit einem Absatz darin erhalten – während Sie überhaupt keine Tabelle plus einen Absatz benötigen
– warum
14. Januar 2021 um 1:12 Uhr
Immer noch nützlich für mich.
– Masiorama
17. März um 10:49 Uhr
Ich denke, Sie versuchen zu überprüfen, ob das Array leer ist oder nicht. Sie können folgendermaßen vorgehen:
@if(!$result->isEmpty())
// $result is not empty
@else
// $result is empty
@endif
nicht immer darf man verwenden @forelse (zB zum Rendern nicht leerer Tabellen). darf man auch nicht verwenden @empty (auch nicht empty($collection)!) mit leeren Sammlungen. die von Ihnen vorgeschlagene Lösung bleibt der letzte Ausweg! Danke!
Sie können count verwenden, aber wenn das Array größer ist, dauert es länger, wenn Sie nur wissen müssen, ob es leer ist, ist leer besser zu verwenden.
Vielen Dank für Ihre Antwort mit dieser Methode. Ich erhalte die folgende Fehlermeldung – syntax error, unexpected ':', expecting '('
– Sam
18. September 2015 um 13:22 Uhr
aktualisierter erster Beitrag mit vollständigem Code, wenn ich die if-Anweisung entferne, haben wir gerade hinzugefügt, dass die Seite ohne Fehler geladen wird: S
– Sam
18. September 2015 um 13:42 Uhr
Wenn Sie alles aus Ihrem Foreach entfernen, erhalten Sie immer noch den Fehler?
– iain
21. September 2015 um 10:11 Uhr
Wenn $status ist eine Sammlung, Überprüfung mit empty() wird nicht funktionieren, es wird immer wahr zurückgegeben. Sie müssen eine von verwenden $status->isEmpty(), $status->count()oder count($status).
– Matt K
2. Dezember 2015 um 16:27 Uhr
Es ist also ein Array ==== '' funktioniert nicht (das === bedeutet, dass es eine leere Zeichenfolge sein muss.)
Verwenden zählen() um zu identifizieren, dass das Array irgendwelche Elemente hat (Anzahl gibt eine Zahl zurück, 1 oder größer wird als wahr ausgewertet, 0 = falsch).
@if (count($status->replies) > 0)
// your HTML + foreach loop
@endif
Nabel Schah
Echodaten, falls vorhanden
Manchmal möchten Sie vielleicht eine Variable ausgeben, sind sich aber nicht sicher, ob die Variable gesetzt wurde. Wir können dies in ausführlichem PHP-Code wie folgt ausdrücken:
{{ isset($name) ? $name : 'Default' }}
Anstatt jedoch eine ternäre Anweisung zu schreiben, bietet Ihnen Blade die folgende praktische Abkürzung:
{{ $name or 'Default' }}
Wenn in diesem Beispiel die Variable $name vorhanden ist, wird ihr Wert angezeigt. Wenn es jedoch nicht vorhanden ist, wird das Wort Standard angezeigt.
Jetzt, da Laravel PHP 7.1 erfordert, können Sie den Null-Coalesce-Operator verwenden: {{ $name ?? ‘Default’}} (Der “or”-Operator ist in Laravel 5.6 veraltet)
– Jannej
21. Juni 2018 um 9:03 Uhr
Mit dem folgenden Code kann man zuerst überprüfen, ob die Variable gesetzt ist oder nicht, indem man @isset der Laravel-Direktive verwendet und dann überprüft, ob das Array leer ist oder nicht, indem man @unless der Laravel-Direktive verwendet
@if(@isset($names))
@unless($names)
Array has no value
@else
Array has value
@foreach($names as $name)
{{$name}}
@endforeach
@endunless
@else
Not defined
@endif
Jetzt, da Laravel PHP 7.1 erfordert, können Sie den Null-Coalesce-Operator verwenden: {{ $name ?? ‘Default’}} (Der “or”-Operator ist in Laravel 5.6 veraltet)
– Jannej
21. Juni 2018 um 9:03 Uhr
Zuschreiber
Dies ist meine beste Lösung, wenn ich die Frage gut verstanden habe:
Gebrauch von $object->first() -Methode, um den darin enthaltenen Code auszuführen if Anweisung einmal, das heißt, wenn auf der ersten Schleife. Das gleiche Konzept gilt für $object->last().
Wenn
$status->replies
leer ist, warum nicht mit testen leer()?…@if (empty($status->replies))
Anstatt anzunehmen, dass es eine Zeichenfolge ist, wenn es leer ist?– Markus Bäcker
18. September 2015 um 13:09 Uhr