Php 通过数组计算总体和部门排名
这是一项后续行动 我有一个生成结果的SQL查询: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
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-”,下一个团队的排名没有适当增加)。