Laravel刀片检查空的foreach

Sam*_*Sam 37 php foreach laravel

我想检查我的foreach是否为空,因此基本的html标记不显示,内部没有结果.我正在尝试将其包装在if语句中,然后如果它是空的,则不执行任何其他循环操作.

@if ($status->replies === '')

@elseif
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>
@endif

@if (!(empty($status->replies))
<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <div class="media">
            <a class="pull-left" href="{{ route('profile.index', ['username' => $reply->user->username]) }}">
                <img class="media-object" alt="{{ $reply->user->getNameOrUsername() }}" src="{{ $reply->user->getAvatarUrl() }}">
            </a>
            <div class="media-body">
                <h5 class="media-heading"><a href="{{ route('profile.index', ['username' => $reply->user->username]) }}">{{ $reply->user->getNameOrUsername() }}</a></h5>
                <p>{{ $reply->body }}</p>
                <ul class="list-inline list-replies">
                    <li>
                        <a href="{{ route('status.like', ['statusId' => $reply->id]) }}"><i class="fa fa-thumbs-up"></i></a>
                    {{ $reply->likes->count() }} {{ str_plural('like', $reply->likes->count()) }}</li>
                    <li>{{ $reply->created_at->diffForHumans() }}</li>
                </ul>
            </div>
            <hr>
        </div>
    @endforeach
</div>
@endif
Run Code Online (Sandbox Code Playgroud)

cre*_*re8 160

查看文档以获得最佳结果:

@forelse($status->replies as $reply)
    <p>{{ $reply->body }}</p>
@empty
    <p>No replies</p>
@endforelse
Run Code Online (Sandbox Code Playgroud)

  • Upvoted - 这应该是答案. (10认同)
  • 它可能很旧,但是天哪,我现在有很多代码要重写!我不知道这存在! (7认同)

Kir*_*edi 33

我想你正试图检查数组是否为空.你可以这样做:

@if(!$result->isEmpty())
     // $result is not empty
@else
    // $result is empty
@endif
Run Code Online (Sandbox Code Playgroud)

参考 isEmpty()


iai*_*ain 11

你应该使用 empty()

@if (!empty($status->replies)) 

<div class="media-body reply-body">
    @foreach ($status->replies as $reply)
        <p>{{ $reply->body }}</p>
    @endforeach
</div>

@endif
Run Code Online (Sandbox Code Playgroud)

您可以使用计数,但如果数组较大则需要更长的时间,如果您只需要知道它是否为空,则使用空是更好的。

  • 如果 `$status` 是一个集合,则使用 `empty()` 进行检查将不起作用,它将始终返回 true。您必须使用 `$status-&gt;isEmpty()`、`$status-&gt;count()` 或 `count($status)` 之一。 (3认同)

Wil*_*ell 6

它是一个数组,所以==== ''不起作用(=== 意味着它必须是一个空字符串。)

使用count()来识别数组是否有任何元素(count 返回一个数字,1 或更大的将评估为真,0 = 假。)

@if (count($status->replies) > 0)
 // your HTML + foreach loop
@endif
Run Code Online (Sandbox Code Playgroud)


小智 5

回显数据(如果存在)

有时您可能希望回显某个变量,但不确定该变量是否已设置。我们可以用详细的 PHP 代码来表达这一点,如下所示:

{{ isset($name) ? $name : 'Default' }}
Run Code Online (Sandbox Code Playgroud)

然而,Blade 为您提供了以下方便的快捷方式,而不是编写三元语句:

{{ $name or 'Default' }}
Run Code Online (Sandbox Code Playgroud)

在此示例中,如果 $name 变量存在,则将显示其值。但是,如果不存在,则会显示“默认”一词。

来自https://laravel.com/docs/5.4/blade#displaying-data

  • 现在 Laravel 需要 PHP 7.1,您可以使用 null 合并运算符: {{ $name ?? '默认'}} (“or”运算符在 Laravel 5.6 中已弃用) (2认同)