基于2个以上条件的PHP多端口数组

基于2个以上条件的PHP多端口数组,php,arrays,multidimensional-array,criteria,Php,Arrays,Multidimensional Array,Criteria,我编写了一个php脚本,它将根据力量和道德等参数执行一场完整的(荷兰)足球比赛 “播放”所有回合后,我使用usort定义最终结果 这些结果基于“点”字段。然而,当两支球队得分相同时,必须通过比较目标差异来获得进一步的排名 我尝试使用第一个排序om“Points”和第二个排序om“GoalDifference(GD)”来完成此排序。不幸的是,在后一种情况下,球差被正确地排序,但不是分数 这就是团队阵列现在的样子: $teams = array ( array(

我编写了一个php脚本,它将根据力量和道德等参数执行一场完整的(荷兰)足球比赛

“播放”所有回合后,我使用
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做错了什么,那就不要鹦鹉学舌。更正一下,万一我想保留钥匙呢?