Laravel 多维数组不计算结果

Laravel multidimensional array not counting results

我的联赛排名有问题。团队有不止一场比赛,但结果只显示一场。所以数组中的结果不计算在内。

例如:

第一支球队打了不止一场比赛,但数组只显示了一场,数组:

array:10 [▼
  "firstTeam" => array:6 [▼
    "points" => 3
    "scoredGoals" => 3
    "goalsConceded" => 1
    "wins" => 1
    "loses" => 0
    "draws" => 0
  ]
  "secondTeam" => & array:6 [▶]
  "thirdTeam" => array:6 [▶]
  "fourthTeam" => array:6 [▶]
  "fifthTeam" => array:6 [▶]
  "sixthTeam" => array:6 [▶]
  "seventhTeam" => & array:6 [▶]
  "eighthTeam" => array:6 [▶]
  "ninthTeam" => & array:6 [▶]
  "tenthTeam" => array:6 [▶]
]

匹配:

帮助计算结果。

我的控制器:

    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 = &$standings[$match->homeTeam->name];
        $away = &$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 = &$home;
                $home = &$away;
                $away = &$tmpHome;
            case 1:
                // home won
                $home['points'] += 3;
                $home['wins']++;
                $away['loses']++;
                break;
            default:
                // draw
                $home['points']++;
                $away['points']++;
                $home['draws']++;
                $away['draws']++;
        }
    }
     

积分榜:

您必须停止在每次迭代时覆盖团队的排名数组。如果你想调整以前的代码,你可以调整下面的内容:

这个:

$standings[$match->homeTeam->name] ??= $blank;
$standings[$match->awayTeam->name] ??= $blank;

是:

if (! isset($standings[$match->homeTeam->name])) {
    $standings[$match->homeTeam->name] = $blank;
}

if (! isset($standings[$match->awayTeam->name])) {
    $standings[$match->awayTeam->name] = $blank;
}

??= 是来自 PHP 7.4 的运算符,因此您可能使用的是较低版本的 PHP.