基于2个以上条件的PHP多端口数组
我编写了一个php脚本,它将根据力量和道德等参数执行一场完整的(荷兰)足球比赛 “播放”所有回合后,我使用基于2个以上条件的PHP多端口数组,php,arrays,multidimensional-array,criteria,Php,Arrays,Multidimensional Array,Criteria,我编写了一个php脚本,它将根据力量和道德等参数执行一场完整的(荷兰)足球比赛 “播放”所有回合后,我使用usort定义最终结果 这些结果基于“点”字段。然而,当两支球队得分相同时,必须通过比较目标差异来获得进一步的排名 我尝试使用第一个排序om“Points”和第二个排序om“GoalDifference(GD)”来完成此排序。不幸的是,在后一种情况下,球差被正确地排序,但不是分数 这就是团队阵列现在的样子: $teams = array ( array(
usort
定义最终结果
这些结果基于“点”字段。然而,当两支球队得分相同时,必须通过比较目标差异来获得进一步的排名
我尝试使用第一个排序om“Points”和第二个排序om“GoalDifference(GD)”来完成此排序。不幸的是,在后一种情况下,球差被正确地排序,但不是分数
这就是团队阵列现在的样子:
$teams = array
(
array(
'Id' => 1,
'Teamname' => 'Team 1,
'Strength' => 22,
'Moral' => 15,
'Points' => 0,
'Pro' => 0,
'Contra'=> 0,
'GD' => 0
)
}
下面是usort函数
usort($teams, function($a, $b) {
return $a['Points'] < $b['Points'];
});
usort($teams, function($a, $b) {
return $a['GD'] < $b['GD'];
});
usort($teams,function($a,$b){
返回$a['Points']<$b['Points'];
});
usort($团队,职能($a,$b){
返回$a['GD']<$b['GD'];
});
所以我的问题是,什么是最好的方法,首先对分数排序,然后对进球差异排序
亲切问候,
KEE同时包括两种比较。因此,如果分数相同,则使用目标差
usort($teams, function($a, $b) {
return ($a['Points'] === $b['Points']
? $a['GD'] < $b['GD']
: $a['Points'] < $b['Points']);
});
usort($teams,function($a,$b){
返回($a['Points']==$b['Points']
?$a['GD']<$b['GD']
:$a['Points']<$b['Points']);
});
您可以构建一个更复杂的排序函数,在该函数中检查列的优先级
usort($teams, function($a, $b) {
if ($a["Points"] < $b["Points"]) return -1;
if ($a["Points"] > $b["Points"]) return 1;
if ($a['GD'] < $b['GD']) return -1;
if ($a['GD'] > $b['GD']) return 1;
return 0;
});
usort($teams,function($a,$b){
如果($a[“积分”]<$b[“积分”])返回-1;
如果($a[“点数”]>$b[“点数”])返回1;
如果($a['GD']<$b['GD'])返回-1;
如果($a['GD']>$b['GD'])返回1;
返回0;
});
您可以使用array\u multisort()
函数
$points = array();
$gd = array();
foreach ($teams as $key => $row) {
$points[$key] = $row['Points'];
$gd[$key] = $row['GD'];
}
array_multisort($points, SORT_DESC, $gd, SORT_DESC, $teams);
您需要返回一个值0,而不是
true
或false
。您应该返回,但由于作者使用了相同的逻辑,可能它有自己的排序机制,基于true
/false
,而不需要-1
。只是想和问题保持一致。如果OP做错了什么,那就不要鹦鹉学舌。更正一下,万一我想保留钥匙呢?