Laravel 多维数组不计算结果

Posted

技术标签:

【中文标题】Laravel 多维数组不计算结果【英文标题】:Laravel multidimensional array not counting results 【发布时间】:2021-03-25 22:24:30 【问题描述】:

我在联赛积分榜上有问题。球队有不止一场比赛,但结果只显示一场。所以数组中的结果不计算在内。

例如:

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

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']++;
        
    
     

排名:

【问题讨论】:

fetch-additional-data-in-to-array-from-database 这里描述了关系 您将在该循环的每次迭代中将排名数组中的球队信息重置为空白值:$standings[$match-&gt;homeTeam-&gt;name] = $blank; ...因此任何球队的信息都不能超过 1 场比赛,因为您一直在覆盖它 那么应该用什么来代替:$standings[$match->homeTeam->name] = $blank; @lagbox 对不起,我看不到“@lagbox”的位置 $standings[$match->homeTeam->name] ??= $blank; $排名[$match->awayTeam->name] ??= $blank;如果你是这个意思,它没有帮助,得到错误@lagbox 【参考方案1】:

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

这个:

$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。

【讨论】:

没问题,只要确保花一些时间了解所有这些的作用 也许你能帮我解决这个问题?积分榜只针对有附加结果的球队,但我需要没有附加结果的球队在积分、比赛等方面的价值应为 0

以上是关于Laravel 多维数组不计算结果的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 laravel 将多维数组传递给 API

循环多维数组 Laravel

如何在 Laravel 测试中发布多维数组?

Laravel - 无法使用刀片从多维数组中获取值

在 laravel 中导出 excel 或 csv 中的多维数组

Laravel 5.7 中的 php 多维数组循环问题