Php 通过数组计算总体和部门排名

Php 通过数组计算总体和部门排名,php,mysql,arrays,ranking,Php,Mysql,Arrays,Ranking,这是一项后续行动 我有一个生成结果的SQL查询: team_id division_id wins ------------------------------- 10 2 44 9 2 42 5 1 42 2 1 42 3 1 41 11 2 40 1

这是一项后续行动

我有一个生成结果的SQL查询:

team_id   division_id   wins
-------------------------------
10        2             44
9         2             42
5         1             42
2         1             42
3         1             41
11        2             40
1         1             36
8         2             31
7         2             29
12        2             24
4         1             20
6         1             18
我试图计算一个给定团队的总体分区排名

例如,团队id=1

Overall:       7
Divisional:    4
Overall:       5
Divisional:    3
Overall:     T-2  //must indicate tie
Divisional:    2
对于团队\u id=3

Overall:       7
Divisional:    4
Overall:       5
Divisional:    3
Overall:     T-2  //must indicate tie
Divisional:    2
对于团队_id=9

Overall:       7
Divisional:    4
Overall:       5
Divisional:    3
Overall:     T-2  //must indicate tie
Divisional:    2
从前面的问题/答案链接中可以看出,我可以很好地计算出总体排名。这个问题还涉及到计算分区级别(包括正确处理关系)

我尝试过将结果存储在多维数组中,如
$arr['wins']['division\u id']['team\u id']

44 =>  2 => 10
42 =>  1 =>  5
             2
       2 =>  9
41 =>  1 =>  3
40 => 11 =>  2
...

但我一直在思考如何遍历并获得我的两个级别,以及如何为每个级别检测适当的关系。

尝试以下方法:

// Dataset as defined on question
$arr = array(
array('team_id' => 10, 'division_id' => 2, 'wins' => 44),
array('team_id' => 9, 'division_id' => 2, 'wins' => 42),
array('team_id' => 5, 'division_id' => 1, 'wins' => 42),
array('team_id' => 2, 'division_id' => 1, 'wins' => 42),
array('team_id' => 3, 'division_id' => 1, 'wins' => 41),
array('team_id' => 11, 'division_id' => 2, 'wins' => 40),
array('team_id' => 1, 'division_id' => 1, 'wins' => 36),
array('team_id' => 8, 'division_id' => 2, 'wins' => 31),
array('team_id' => 7, 'division_id' => 2, 'wins' => 29),
array('team_id' => 12, 'division_id' => 2, 'wins' => 24),
array('team_id' => 4, 'division_id' => 1, 'wins' => 20),
array('team_id' => 6, 'division_id' => 1, 'wins' => 18));


$divisionTeam = array();
$divisionWins = array();
foreach($arr as $team) {
    $divisionTeam[$team['division_id']][] = $team['team_id'];
    $divisionWins[$team['division_id']][] = $team['wins'];
}



echo "<pre>";
foreach (array_keys($divisionTeam) as $division_id) {
    $rank = 0;
    $prevWins = -1;
    echo "DIVISION $division_id \n";
    foreach ($divisionTeam[$division_id] as $index => $team_id) {

       if ($prevWins == $divisionWins[$division_id][$index]) {
           echo $team_id . " T - " . $rank . "\n";
       }
       else { 
           $rank++;
           echo $team_id . " " . $rank . "\n";
       }
       $prevWins = $divisionWins[$division_id][$index];

    }
}
echo "</pre>";
//问题中定义的数据集
$arr=数组(
阵列('团队id'=>10,'部门id'=>2,'胜利'=>44),
阵列('团队id'=>9,'部门id'=>2,'胜利'=>42),
阵列('团队id'=>5,'部门id'=>1,'胜利'=>42),
阵列('团队id'=>2,'部门id'=>1,'胜利'=>42),
阵列('团队id'=>3,'部门id'=>1,'胜利'=>41),
阵列('团队id'=>11,'部门id'=>2,'胜利'=>40),
阵列('团队id'=>1,'部门id'=>1,'胜利'=>36),
阵列('团队id'=>8,'部门id'=>2,'胜利'=>31),
阵列('团队id'=>7,'部门id'=>2,'胜利'=>29),
阵列('团队id'=>12,'部门id'=>2,'胜利'=>24),
阵列('团队id'=>4,'部门id'=>1,'胜利'=>20),
阵型('team_id'=>6,'division_id'=>1,'wins'=>18));
$devisionteam=array();
$WINS=数组();
foreach($arr作为$team){
$divisionTeam[$team['division_id']][=$team['team_id'];
$divisionWins[$team['division_id'][]=$team['wins'];
}
回声“;
foreach(数组_键($division团队)作为$division_id){
$rank=0;
$WINS=-1;
回显“分区$DIVISION\u id\n”;
foreach($division team[$division\u id]作为$index=>$team\u id){
如果($prevWins==$divisionWins[$division\u id][$index]){
echo$team_id.“T-”$rank.\n”;
}
否则{
$rank++;
echo$team\u id.“$rank.\n”;
}
$prevWins=$divisionWins[$division_id][$index];
}
}
回声“;

谢谢,但有两个问题:这并没有给我两个部门的总体排名,而且平局处理得不正确(只有一个平局的团队添加了“t-”,下一个团队的排名没有适当增加)。