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
因此在您的数组中,索引 1
和 2
下有 "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>
我有一个集合,我将其作为数组显示在下面,以便于查看。
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
因此在您的数组中,索引 1
和 2
下有 "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>