2014-09-03 4 views
1

У меня есть следующий цикл foreach, который я получаю хорошие результаты, однако, когда он попадает в оператор elseif, я пытаюсь увидеть, находятся ли два игрока в одной команде или нет, и если они затем их перечислите вместе, разделяя их символом &. В настоящее время я получаю следующее.Инструкция ElseIf с laravel

Player 1 vs. Player 2 vs. Player 3 vs. Player 4 

Это нормально, однако Player 1 и Player 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 

EDIT: Я немного изменил данные, но все равно должен работать.

http://pastebin.com/AdyzemC4 

ответ

2

Это было сложно ломать голову вместе переменную $ матч :)

@if($match->players->count() - 1 != $key) 

Ваш $match->players->count() всегда равно значению числа игроков (сказать «п»). Таким образом, ваш '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 выйдет за пределы вашего массива, и вы получите ошибку смещения. Поэтому добавить еще, если:

@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 
+0

Это было большое предложение, однако его до сих пор дает мне тот же результат всех игроков против не имеет значения, если они находятся на одной и той же команды, или нет. – user3732216

+0

Это поможет, если вы можете 'print_r' переменную' $ match' и добавить ее в вопрос. Я принял все, что мог, из вашего вопроса и, возможно, ошибся. – Nein

+0

На самом деле я беру это обратно, я поместил его в неправильный файл просмотра, но все это показывает как Player 1 и Player 2 для всего списка игр. – user3732216

Смежные вопросы