PHP Multisort数组超过2个标准

时间:2015-05-18 08:05:32

标签: php arrays multidimensional-array criteria

我写了一个php脚本,它将执行一个完整的(荷兰)足球比赛,基于参数作为力量和道德。

在完成所有轮次后,我使用usort来定义最终结果。

这些结果基于'积分'领域。但是,当两支球队拥有相同数量的积分时,必须通过比较目标差异来实现进一步的排名。

我尝试使用第一个排序点'完成此排序。然后排序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'];
});

所以我的问题是,首先对点数进行排序的最佳方法是什么?之后是什么是目标差异?

亲切的问候,

基斯

3 个答案:

答案 0 :(得分:1)

同时包括两个比较。因此,如果积分相同,请使用目标差异

getLabelCell().padLeft ...

答案 1 :(得分:1)

您可以构建一个更复杂的排序函数,以优先检查列。

usort($teams, function($a, $b) {
    return ($a['Points'] === $b['Points'] 
      ? $a['GD'] < $b['GD'] 
      : $a['Points'] < $b['Points']);
});

答案 2 :(得分:1)

您可以使用array_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);