走过数组并排序

时间:2013-07-15 21:12:43

标签: php arrays sorting

好的,所以这是交易:我正在尝试根据以下标准(按顺序)对团队进行排序:

  1. 总体记录
  2. 分区记录
  3. 头对头的结果
  4. 对于第1,2和4项,我只需从SQL数据库中提取数据即可。因此,当我遍历SQL结果时,我可以创建以下数组:

    arr[$row['team_id']] => array('overall_wins'  => $row['wins'],
                                  'division_wins' => $row['div_wins'],
                                  'points'        => $row['pts']);
    

    到目前为止一切顺利。 问题是两个或更多团队拥有相同的总胜场和分区胜利的时候。在这种情况下,我需要能够使用他们的 head-to-head 记录打破平局。

    所以我的想法是遍历上面的数组并使用临时变量检查当前overall_winsdivision_wins是否等于前一个团队的值,然后“做某事”...使用head - 打破领带的记录。

    现在,我可以再次使用SQL获得两个团队之间的正面记录,所以这不是问题,但我的问题是:

    我如何使用使用显示来展示两个团队之间的关系?

    让我们使用以下示例:

      team_id     overall_wins     division_wins
    ------------------------------------------
      B           6                6
      A           7                7
      E           6                5
      C           6                6
      G           10               9
      D           4                3
      F           2                0
    

    这首先要通过:

      team_id     overall_wins     division_wins
    ------------------------------------------
      G           10               9
      A           7                7
      B           6                6
      C           6                6
      E           6                5
      D           4                3
      F           2                0
    

    ...但是让我们说 C队正面击败B队。在这种情况下,B队和C队需要按照上述顺序进行交换。

    我不确定如何在PHP数组的范围内单独执行此操作,而不会对整个临时数组和诸如此类的内容完全疯狂。

    思考?感谢。

1 个答案:

答案 0 :(得分:1)

您可以使用usort

  function compareTeams ($a, $b){
            if ($a["overall_wins"] == $b["overall_wins"]){
                if ($a["division_wins"] == $b["division_wins"]){
                   if ($a["head_to_head"] == $b["head_to_head"]){
                      return 0;
                   } else {
                      return $a["head_to_head"] == $b["head_to_head"];
                   }
                } else {
                   return $a["division_wins"] - $b["division_wins"];
                }
            } else {
                return $a["overall_wins"] - $b["overall_wins"];
            }
  }

  usort($arr, "compareTeams");

$ arr现在将根据您的需要进行排序