我有以下foreach循环,我得到了很好的结果但是当它到达elseif语句时,我试图看看两个玩家是否在同一个团队中,如果他们是那么拥有他们列出在一起分开与&符号。目前我仍然得到以下内容。
Player 1 vs. Player 2 vs. Player 3 vs. Player 4
这是可以的,但是玩家1和玩家2在同一个团队中。因此出于某种原因,它并没有将它们视为同一个团队。有人看到我的问题是什么吗?
@foreach ($match->players AS $key => $player)
@foreach ($player->list as $member)
{{ $member->player_name }}
@endforeach
@if($match->players->count() - 1 != $key)
vs.
@elseif ($match->players[$key - 1]->team_id == $player->team_id)
&
@endif
@endforeach
编辑:我稍微更改了一些数据,但仍然可以使用。
http://pastebin.com/AdyzemC4
答案 0 :(得分:3)
将$ match变量拼凑在一起很棘手:)
@if($match->players->count() - 1 != $key)
您的$match->players->count()
始终等于玩家数量的值(说'n')。因此,您的“if
”仅会检查“ n-1 ”!=当前密钥($key
)。 [除了最后一个键之外都是如此,所以你得到所有'vs']。
这应该有效:
@foreach ($match->players AS $key => $player)
@foreach ($player->list as $member)
{{ $member->player_name }}
@endforeach
@if($player->team_id != $match->players[$key + 1]->team_id)
vs.
@elseif ($player->team_id == $match->players[$key + 1]->team_id)
&
@endif
@endforeach
在此我们正在检查当前玩家的团队是否与下一个玩家的团队[$key+1
]相同。
注意:
你需要为最后一个玩家停止循环,因为$key+1
将超出你的数组,你将得到一个偏移错误。
因此,添加另一个if:
@foreach ($match->players AS $key => $player)
@foreach ($player->list as $member)
{{ $member->player_name }}
@endforeach
@if($key + 1 < $match->players->count())
@if($player->team_id != $match->players[$key + 1]->team_id)
vs.
@elseif ($player->team_id == $match->players[$key + 1]->team_id)
&
@endif
@endif
@endforeach