【问题标题】:Laravel Blade - Displaying array contentLaravel Blade - 显示数组内容
【发布时间】:2016-04-25 14:44:17
【问题描述】:

我调用一些 API 来填充一个数组。最终输出如下所示

Array
(
    [0] => Array
    (
        [leadData] => Array
        (
            [LeadID] => 1232806
            [DateIdentified] => 21/04/2016
            [Client] => Prospect 1
            [LeadName] => Test
            [Owner] => Some Owner
            [Value] => 2160.00
            [Status] => 70%
        )
        [clientData] => Array
        (
            [BusinessStructure] => 
            [IsProspect] => No
        )
        [quoteData] => Array
        (
            [QuoteID] => Q0020
            [ProjectName] => Test
            [Amount] => 1800.00
            [AmountTax] => 360.00
            [AmountIncludingTax] => 2160.00
            [EstimatedCost] => 450.00
            [EstimatedCostTax] => 90.00
            [EstimatedCostIncludingTax] => 540.00
        )
        [customData] => Array
        (
            [0] => Array
            (
                [Lead Type] => New 
            )
            [1] => Array
            (
                [Month] => June
            )
        )
    )
    [1] => Array
    (
        [leadData] => Array
        (
            [LeadID] => 1230279
            [DateIdentified] => 19/04/2016
            [Client] => Bank1
            [LeadName] => test 3
            [Owner] => Some Owner
            [Value] => 36000.00
            [Status] => 50%
        )
        [clientData] => Array
        (
            [BusinessStructure] => 
            [IsProspect] => No
        )
        [quoteData] => Array
        (
            [QuoteID] => Q0016
            [ProjectName] => test 3
            [Amount] => 30000.00
            [AmountTax] => 6000.00
            [AmountIncludingTax] => 36000.00
            [EstimatedCost] => 0.00
            [EstimatedCostTax] => 0.00
            [EstimatedCostIncludingTax] => 0.00
        )
    )
)

需要注意的一点是,有时并非所有信息都在那里,只是因为它不可用。所以你可以看到 Array 0 有一些 customData 而 Array 1 没有。其他元素甚至可能没有 quoteData 部分等。

所以我的刀片模板现在有了这些信息。我基本上想显示所有数据,但如果它不可用,只显示一个空单元格。所以我有以下标题

<table class="table table-bordered table-hover additionalMargin alignment">
    <tr class="col-md-12 noPadding">
        <thead>
        <tr>
            <th>Lead ID</th>
            <th>Client Name</th>
            <th>Is Prospect</th>
            <th>Business Structure</th>
            <th>Quote ID</th>
            <th>Project Name</th>
            <th>Amount</th>
            <th>Amount Tax</th>
            <th>Amount inc Tax</th>
            <th>Cost</th>
            <th>Cost Tax</th>
            <th>Cost inc Tax</th>
            <th>Type</th>
            <th>Month</th>
        </tr>
        </thead>
    </tr>
    <tbody>

    </tbody>
</table> 

但是,在 tbody 中,我正在做的事情似乎很混乱,我似乎可以在正确的位置获取数据的唯一方法是检查所有内容,例如

@if(is_array($leadArray))
        @foreach($leadArray as $array)
            <tr>
                 <td>
                     @if(!empty($array['leadData']))
                        {{ $array['leadData']['LeadID'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['leadData']))
                        {{ $array['leadData']['Client'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['clientData']))
                        {{ $array['clientData']['IsProspect'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['clientData']))
                        {{ $array['clientData']['BusinessStructure'] }}
                     @endif
                 </td>
                <td>
                    @if(!empty($array['quoteData']))
                        {{ $array['quoteData']['QuoteID'] }}
                    @endif
                </td>
                <td>
                    @if(!empty($array['quoteData']))
                        {{ $array['quoteData']['ProjectName'] }}
                    @endif
                </td>
                <td>
                    @if(!empty($array['quoteData']))
                        {{ $array['quoteData']['Amount'] }}
                    @endif
                 </td>
                 <td>
                     @if(!empty($array['quoteData']))
                        {{ $array['quoteData']['AmountTax'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['quoteData']))
                         {{ $array['quoteData']['AmountIncludingTax'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['quoteData']))
                        {{ $array['quoteData']['EstimatedCost'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['quoteData']))
                        {{ $array['quoteData']['EstimatedCostTax'] }}
                     @endif
                 </td>
                 <td>
                     @if(!empty($array['quoteData']))
                         {{ $array['quoteData']['EstimatedCostIncludingTax'] }}
                     @endif
                 </td>
                @if(!empty($array['customData']))
                    @foreach($array['customData'] as $data)
                            <td>
                                @if(!empty($data['Lead Type']))
                                    {{ $data['Lead Type'] }}
                                @endif
                            </td>
                            <td>
                                @if(!empty($data['Month']))
                                    {{ $data['Month'] }}
                                @endif
                            </td>
                    @endforeach
                    @else
                        <td></td>
                        <td></td>
                @endif
            </tr>
        @endforeach
    @endif

有没有更简洁的方法来做到这一点?还是这是我唯一的选择?

谢谢

【问题讨论】:

  • 您可以使用{{ @$array['leadData']['Client'] }} 在数据丢失时抑制错误。或者以使用nulls 填充任何缺失数据的方式对数组进行预处理。
  • @ceejayoz,很有趣。它在任何地方都有记录吗?如果不是,它是如何工作的?
  • @AlexeyMezenin @ 是 PHP 的错误抑制运算符。有关详细信息,请参阅php.net/manual/en/language.operators.errorcontrol.php。它应该很少使用,但您的看起来可能是一个合适的用例。
  • @ceejayoz,谢谢。
  • @AlexeyMezenin 查看@JoelHinz 的答案以获得更好的选择。我忘了 Laravel 的 or

标签: laravel laravel-5 laravel-blade


【解决方案1】:

Blade 有一个功能,您可以使用or 来表示“如果存在则回显此,如果不存在则回显此”。所以你可以做

<td>{{ $array['leadData']['LeadID'] or '' }}</td>

这基本上就是你想要的结果。干净多了,不是吗? :)

文档:https://laravel.com/docs/5.2/blade#displaying-data - 下面几段。

【讨论】:

  • 我忘记了这个。不错。
  • 这实际上非常有趣 - 它似乎还检查它是否为空,这意味着我不需要这样做
  • @Joel Hinz,这也很有趣,绝对赞成。在文档中,他们说它正在检查isset()。但它会检查is_null()empty 吗?
  • 我会自己回答。查看引擎盖下,它只检查isset()
  • @AlexeyMezenin 不。但是isset() 为空值返回 false。我相信空数组会打印为 1,因为 isset 的计算结果为 true。
【解决方案2】:

您还可以通过使用列名迭代数组来更优雅、更短地执行此操作(按照 Joel 的建议使用 or ''):

{{ $dataColumns['leadData'] = ['LeadID', 'Client'] }}
{{ $dataColumns['clientData'] = ['IsProspect', 'BusinessStructure'] }}
{{ #dataColumns['quoteData'] = ['QuoteID', 'ProjectName', 'Amount', 'AmountTax', 'AmountIncludingTax', 'EstimatedCost', 'EstimatedCostTax', 'EstimatedCostIncludingTax'] }}

@if(is_array($leadArray))
    @foreach($leadArray as $array)
        <tr>
            @foreach($dataColumns as $dataColumn)
                @foreach($dataColumn as $column)
                    <td>{{ $array[$dataColumn][$column] or '' }}</td>
                @endforeach
            @endforeach
            @if(!empty($array['customData']))
                @foreach($array['customData'] as $data)
                    <td>{{ $data['Lead Type'] or ''}}</td>
                    <td>{{ $data['Month'] or '' }}</td>
                @endforeach
            @else
                    <td></td>
                    <td></td>
            @endif
        </tr>
    @endforeach
@endif

【讨论】:

  • 谢谢,我试了一下,它说 html eminities 期望参数 1 是一个字符串,给定数组
  • 在哪一行?另外,尝试使用{!! !!} 而不是{{ }}
  • 很难说,因为它在 helpers.php 第 469 行说 ErrorException:
  • 好的,那就把{{改成{!!就不会调用htmlentities()
  • 我认为这是它抱怨的列线。如果我使用 {{ 它抱怨期望参数 1 是一个字符串。如果我将其更改为 {!!它给了我错误数组到字符串的转换
猜你喜欢
  • 2022-12-10
  • 1970-01-01
  • 2021-03-08
  • 2021-09-04
  • 2017-01-26
  • 2018-09-23
  • 2018-04-25
  • 2018-02-04
  • 2017-01-05
相关资源
最近更新 更多