【问题标题】:PHP Multisort array on more than 2 criteria [duplicate]PHP Multisort数组超过2个标准[重复]
【发布时间】:2015-07-29 15:34:15
【问题描述】:

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

“玩完”所有回合后,我使用usort 来定义最终结果。

这些结果基于“积分”字段。但是,当两支球队的积分相同时,就必须通过比较净胜球来获得进一步的排名。

我尝试使用第一次排序 om 'Points' 和之后排序 om 'GoalDifference (GD)' 来完成这种排序。不幸的是,在后一种情况下,goaldifference 排序正确,但 Points 排序不正确......

这就是现在的团队数组的样子:

    $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'];
});

所以我的问题是,首先按分数排序,然后按目标差排序的最佳方法是什么?

亲切的问候,

基斯

【问题讨论】:

    标签: php arrays multidimensional-array criteria


    【解决方案1】:

    您可以构建一个更复杂的排序功能,您可以在其中优先检查列。

    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;
    });
    

    【讨论】:

    • 如果我想保留钥匙?
    【解决方案2】:

    同时包含两个比较。所以如果分数相同,使用目标差

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

    【讨论】:

    • 您需要返回一个值 0,而不是 truefalse
    • 应该可以,但是由于作者使用了同样的逻辑,也许它有自己的基于true/false的排序机制,不需要-1。只是想与问题保持一致。
    • 如果 OP 做错了什么,那就不要鹦鹉学舌。更正它。
    【解决方案3】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-11
      • 1970-01-01
      • 2020-08-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-11-19
      相关资源
      最近更新 更多