Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/249.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 遍历数组并进行排序_Php_Arrays_Sorting - Fatal编程技术网

Php 遍历数组并进行排序

Php 遍历数组并进行排序,php,arrays,sorting,Php,Arrays,Sorting,好的,交易是这样的:我试图根据以下标准(按顺序)对团队进行排序: 总体记录 分区记录 直接结果 要点 对于项目1、2和4,我可以简单地从SQL数据库中提取数据。因此,当我遍历SQL结果时,我可以创建以下数组: arr[$row['team_id']] => array('overall_wins' => $row['wins'], 'division_wins' => $row['div_wins'],

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

  • 总体记录
  • 分区记录
  • 直接结果
  • 要点
  • 对于项目1、2和4,我可以简单地从SQL数据库中提取数据。因此,当我遍历SQL结果时,我可以创建以下数组:

    arr[$row['team_id']] => array('overall_wins'  => $row['wins'],
                                  'division_wins' => $row['div_wins'],
                                  'points'        => $row['pts']);
    
    到目前为止一切都很好。问题是指两个或两个以上团队的总体胜利和分区胜利相等。在这种情况下,我需要能够利用他们的头对头记录打破平局

    因此,我的想法是迭代上述数组,并使用临时变量检查当前的
    总体胜利
    部门胜利
    是否与前一个团队的价值相等,然后“做点什么”…使用正面对正面记录打破平局

    现在,我可以再次使用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数组的范围内做到这一点,而不完全疯狂地使用整个临时数组等等

    想法?谢谢。

    您可以使用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现在将根据您的需要进行排序

    那么,什么样的模式可以让您确定正面对正面的结果呢?@Jon我直接用SQL比较这两个团队的正面对正面的得分,并从中获得赢/输的数字。如果您只是
    usort()
    ,你可以调用任何函数/当你意识到整体和分区的胜利是一样的时,你可以调用任何数据库调用…@praguian:这是一个已经固定的打字错误,意思是:)(是的,你已经看到了;))在
    选择部分选择一个迎头胜利字段作为派生/计算字段,然后你可以对其进行排序,例如,
    选择team.id,(此处为魔术素材)作为head-to-head。。。。按总体获胜、分区获胜、人头对人头排序