#arrays #laravel #model-view-controller #multidimensional-array #eloquent
#массивы #ларавель #модель-представление-контроллер #многомерный массив #красноречивый
Вопрос:
у меня есть массив турнирной таблицы с информацией о команде и рассчитанными очками. Но также мне нужно получить количество голов каждой команды. Нужна помощь, как извлечь его в текущий массив.
Это мой LeaguesController:
public function standings(League $league, Team $team)
{
$standings = [
];
$matches = Match::where('league_id', '=', $league->id)->get();
foreach($matches as $match) {
$homeTeamScore = $match->score->home_team_score;
$awayTeamScore = $match->score->away_team_score;
if ($homeTeamScore === $awayTeamScore) {
if (isset($standings[$match->homeTeam->name])) {
$standings[$match->homeTeam->name] = 1;
} else {
$standings[$match->homeTeam->name] = 1;
}
if (isset($standings[$match->awayTeam->name])) {
$standings[$match->awayTeam->name] = 1;
} else {
$standings[$match->awayTeam->name] = 1;
}
}
if ($homeTeamScore > $awayTeamScore) {
if (isset($standings[$match->homeTeam->name])) {
$standings[$match->homeTeam->name] = 3;
} else {
$standings[$match->homeTeam->name] = 3;
}
if (!isset($standings[$match->awayTeam->name])) {
$standings[$match->awayTeam->name] = 0;
}
}
if ($homeTeamScore < $awayTeamScore) {
if (isset($standings[$match->awayTeam->name])) {
$standings[$match->awayTeam->name] = 3;
} else {
$standings[$match->awayTeam->name] = 3;
}
if (!isset($standings[$match->homeTeam->name])) {
$standings[$match->homeTeam->name] = 0;
}
}
}
return view('admin.leagues.standings')->with('standings',$standings);
}
и массив, который у меня есть:
array:2 [▼
"secondTeam" => 3
"firstTeam" => 0
]
я хочу сделать что-то вроде этого:
array:3 [▼
"firstTeam" => array:6 [▼
"points" => 10
"scoredGoals" => 15
"goalsConceded" => 20
"wins" => 20
"loses" => 20
"draws" => 20
]
"secondTeam" => array:6 [▼
"points" => 10
"scoredGoals" => 15
"goalsConceded" => 20
"wins" => 20
"loses" => 20
"draws" => 20
]
"ThirdTeam" => array:6 [▼
"points" => 10
"scoredGoals" => 15
"goalsConceded" => 20
"wins" => 20
"loses" => 20
"draws" => 20
]
]
Как извлечь данные в массив
Ответ №1:
Вы могли бы попробовать что-то вроде этого. Вы должны добавлять для всех этих дополнительных полей, которые вы хотите:
public function standings(League $league, Team $team)
{
$standings = [];
$blank = [
'points' => 0,
'scoredGoals' => 0,
'goalsConceded' => 0,
'wins' => 0,
'loses' => 0,
'draws' => 0,
];
$matches = Match::with('score', 'homeTeam', 'awayTeam')
where('league_id', '=', $league->id)->get();
foreach ($matches as $match) {
$homeTeamScore = $match->score->home_team_score;
$awayTeamScore = $match->score->away_team_score;
$standings[$match->homeTeam->name] ??= $blank;
$standings[$match->awayTeam->name] ??= $blank;
$home = amp;$standings[$match->homeTeam->name];
$away = amp;$standings[$match->awayTeam->name];
$away['scoredGoals'] = $awayTeamScore;
$home['scoredGoals'] = $homeTeamScore;
$away['goalsConceded'] = $homeTeamScore;
$home['goalsConceded'] = $awayTeamScore;
switch ($homeTeamScore <=> $awayTeamScore) {
case -1:
// home lost
// swap home and away and let it fall through
$tmpHome = amp;$home;
$home = amp;$away;
$away = amp;$tmpHome;
case 1:
// home won
$home['points'] = 3;
$home['wins'] ;
$away['loses'] ;
break;
default:
// draw
$home['points'] ;
$away['points'] ;
$home['draws'] ;
$away['draws'] ;
}
}
return view('admin.leagues.standings')->with('standings',$standings);
}
Комментарии:
1. Спасибо! можете ли вы помочь представить этот массив в файле представления? пытаюсь что-то вроде этого: <td>{{$team_name}}</td> <td>{{$points}}</td> но получаю ошибки..
2. это не работает должным образом. Массив не учитывает результаты, когда команда проводит более одного матча.