Laravel刀片中的最小值和最大值

时间:2017-01-03 14:06:49

标签: php twitter-bootstrap laravel

我的刀片视图中有一张表,它显示如下(我只把tr和td部分拿出来):

@foreach ($event->offers as $offer)
    <tr>
        <td class="text-center"><a href="/offers/{{ $offer->id }}">{{ $offer->user->company }}</a></td>
        <td class="text-center">{{ $offer->created_at }}</td>
        <td class="text-center"><span class="btn btn-default">{{ $offer->netto }} €</span></td>
    </tr>
@endforeach

我想要的是相应地更改bootstrap btn类的最小值和最大值,但仅限于这两个值!

我找到了一个原生的php函数min()和max()

http://php.net/manual/en/function.min.php

但我不知道如何使用blade和foreach循环来实现它。

2 个答案:

答案 0 :(得分:1)

第一种方式sortBy()收集并使用the loop variable。它只显示最小值和最大值一次:

@foreach ($event->offers->sortBy('netto') as $offer)
    ....
    <td class="text-center"><span class="btn btn-default {{ $loop->first ? 'minClass'  : '' }}{{ $loop->last ? 'maxClass'  : '' }}">{{ $offer->netto }} €</span>
@endforeach

第二种方式有点难看,但即使存在多个相同的最小值或最大值,它也会显示最小和最大一次。使用min()max()助手:

<?php $min = $event->offers->min('netto');
      $max = $event->offers->max('netto');
      $minShown = false;
      $maxShown = false; ?>

@foreach ($event->offers as $offer)
    ....

    {{-- Show min class only once --}}
    <?php $minClass = ''; $maxCalss = ''; ?>
    @if (!$minShown && $offer->netto == $min)
        <?php $minShown = true; $class = 'minClass' ?>
    @endif

    {{-- Show max class only once --}}
    @if (!$maxShown && $offer->netto == $max)
        <?php $maxShown = true; $class = 'maxClass' ?>
    @endif

    <span class="btn btn-default {{ $class }}">{{ $offer->netto }} €</span>
@endforeach

答案 1 :(得分:0)

选项1

如果条件满足,则添加额外的类(使用三元if):

{{ $offer->netto == $event->offers->max('netto') ? 'ADDITIONAL CLASS' : '' }}

像这样插入:

<td class="text-center"><span class="btn btn-default {{ $offer->netto == $event->offers->max('netto') ? 'ADDITIONAL CLASS' : '' }}">{{ $offer->netto }} €</span></td>

它不是最优化的代码片段,因为它将在每次迭代时执行->max()。但是你可以从这里开始优化(在变量等中保存最大值......)。 ->min()

可以做同样的事情

选项2:

你有可能需要这样的东西。这假设您将根据netto:

的最大/最小值更改“btn-default”类
<td class="text-center">
    <span 
        @if($offer->netto == $event->offers->max('netto'))
        class="btn btn-max">
        @elseif($offer->netto == $event->offers->min('netto'))
        class="btn btn-min">
        @else
        class="btn btn-default">
        @endif
        {{ $offer->netto }} €
    </span>
</td>