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->homeTeam->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 多维数组不计算结果的主要内容,如果未能解决你的问题,请参考以下文章