Laravel刀片检查空的foreach

时间:2015-09-18 13:07:36

标签: php laravel foreach

我想检查我的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

7 个答案:

答案 0 :(得分:141)

检查documentation以获得最佳效果:

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

答案 1 :(得分:26)

我认为您正在尝试检查数组是否为空。您可以这样做:

@if(!$result->isEmpty())
     // $result is not empty
@else
    // $result is empty
@endif

参考 isEmpty()

答案 2 :(得分:4)

  

如果存在则回显数据

     

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

{{ isset($name) ? $name : 'Default' }}
     

然而,Blade并没有编写三元语句,而是为您提供以下方便的捷径:

{{ $name or 'Default' }}
     

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

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

答案 3 :(得分:2)

它是一个数组,所以==== ''无法工作(===表示它必须是一个空字符串。)

使用count()标识数组中有任何元素(count返回一个数字,1或更大将评估为true,0 = false。)

@if (count($status->replies) > 0)
 // your HTML + foreach loop
@endif

答案 4 :(得分:2)

你应该使用empty()

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

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

@endif

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

答案 5 :(得分:0)

如果我理解这个问题,这是我最好的解决方案:

使用link1方法在$object->first()语句中运行一次代码,即第一次循环时的代码。 if也是如此。

$object->last()

答案 6 :(得分:0)

使用以下代码,可以先使用laravel指令的@isset检查变量是否已设置,然后使用@unless的laravel指令检查数组是否为空或不使用

@if(@isset($names))
    @unless($names)
        Array has no value
    @else
        Array has value

        @foreach($names as $name)
            {{$name}}
        @endforeach

    @endunless
@else
    Not defined
@endif