PHP 根据 2 个以上的条件对数组进行多排序

PHP Multisort array on more than 2 criteria

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

所有回合都'played'后,我用usort来定义最终结果。

这些结果基于 'Points' 字段。但是,当两支球队的积分相同时,则需要通过净胜球的比较来进一步排名。

我尝试使用第一个排序 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) {
    return ($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;
});

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