2016-03-04 105 views
0

我有一個集合,我在下面顯示爲一個數組,以便於查看。Laravel 5 Blade - 在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?

有關這方面的任何信息讚賞。

謝謝

+0

您選擇集合的指數(VAR名ID),所以你可以看到在'1'它首次啓動喝第二組,然後是'2'。 –

回答

2

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

爲了得到你想要的索引,創建一個過濾你想要的東西,一個新的集合:

<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> 
+1

使用框架的工具清楚地解釋和重構。 +1。 – lesssugar

+0

爲什麼你認爲這是雄辯? – Kocik

+0

@Kocik - 我不知道。我的代碼片段中沒有任何內容假設爲Eloquent。 –

1

環路的行爲是完全正常的。您的$id是您正在迭代的數組中的索引。 見documantation:https://secure.php.net/manual/en/control-structures.foreach.php

所以你的數組中你有「喝」下指標12。你需要不同的方法 - 你需要你,如果增加內部獨立可變塊:

<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>