Laravel 5 Blade - foreach 中的奇怪事件

Laravel 5 Blade - strange occurence in foreach

我有一个集合,我将其作为数组显示在下面,以便于查看。

array:3 [▼
  0 => array:7 [▼
    "id" => 6
    "name" => "food"
    "value" => "T1 M1"
  ]
  1 => array:7 [▼
    "id" => 7
    "name" => "drink"
    "value" => ""
  ]
  2 => array:7 [▼
    "id" => 8
    "name" => "drink"
    "value" => "A1 P1"
  ]
]

在我看来,我正在做类似下面的事情

<div class="col-md-3 noPadding">
    @foreach($party->partyOptions as $id => $data)
        @if ($data->name === 'food')
            <div class='col-md-12'>
                <label>Number of food {{ $id + 1 }}:</label>
            </div>
        @endif
    @endforeach
</div>

<div class="col-md-3 noPadding">
    @foreach($party->partyOptions as $id => $data)
        @if ($data->name === 'drink')
            <div class='col-md-12'>
                <label>Number of drink {{ $id + 1 }}:</label>
            </div>
        @endif
    @endforeach
</div>

我对类型做了不同的循环,因为我正在做一些上面没有显示的额外内容。 无论如何,有了上面的内容,我希望第一个 div 显示

Number of food 1

第二个div显示

Number of drink 1
Number of drink 2

然而事实并非如此。相反,它继续 id 计数,所以我得到的输出是

Number of food 1

Number of drink 2
Number of drink 3

如果我有更多要搜索的名字,数字会继续。

为什么会这样?难道不应该为每个循环重置 id 吗?

如有任何相关信息,我们将不胜感激。

谢谢

您使用的是集合的索引,而不是迭代的索引。

要获得您想要的索引,请创建一个新的集合,过滤出您想要的内容:

<div class="col-md-3 noPadding">
    @foreach($party->partyOptions->where('name', 'food')->values() as $id => $data)
        <div class="col-md-12">
            <label>Number of food {{ $id + 1 }}:</label>
        </div>
    @endforeach
</div>

<div class="col-md-3 noPadding">
    @foreach($party->partyOptions->where('name', 'drink')->values() as $id => $data)
        <div class="col-md-12">
            <label>Number of drink {{ $id + 1 }}:</label>
        </div>
    @endforeach
</div>

循环行为完全正常。 Your$id 是您正在迭代的数组中的索引。 请参阅文档:https://secure.php.net/manual/en/control-structures.foreach.php

因此在您的数组中,索引 12 下有 "drink"。你需要不同的方法 - 你需要单独的变量,如果块:

<div class="col-md-3 noPadding">
{{$i = 0}}
    @foreach($party->partyOptions as $id => $data)
        @if ($data->name === 'drink')
            {{$i ++}}
            <div class='col-md-12'>
                <label>Number of drink {{ $i }}:</label>
            </div>
        @endif
    @endforeach
</div>