有一个这样的数组里面有两个学校混合的学生成绩 ,我想要每个学生在自己的学校所在排名,并且成绩相同排名并列,下一名得排名需要增加上面并列名次得数量
$students = array(
array(
'id' => 72,
'name' => '学生LL',
'school' => '云校',
'zongfen' => 330,
),
array(
'id' => 49,
'name' => '学生A',
'school' => '云校',
'zongfen' => 300,
),
array(
'id' => 50,
'name' => '学生B',
'school' => '云校云校',
'zongfen' => 295,
),
// 其他学生...
)
php 成绩并列排序问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
2条回答 默认 最新
梦幻编织者 2023-06-20 11:22关注<?php // 按照学校和总分进行排序 usort($students, function($a, $b) { if ($a['school'] == $b['school']) { return $b['zongfen'] - $a['zongfen']; } else { return strcmp($a['school'], $b['school']); } }); $rank = 1; // 排名从1开始 $prevSchool = ''; // 上一个学校的名称 $prevScore = 0; // 上一个学生的总分 $prevRank = 0; // 上一个学生的排名 foreach ($students as $student) { if ($student['school'] != $prevSchool) { // 如果这个学生的学校与上一个学生的学校不同,那么排名需要重置 $rank = 1; $prevScore = 0; $prevRank = 0; $prevSchool = $student['school']; } if ($student['zongfen'] == $prevScore) { // 如果这个学生的总分与上一个学生的总分相同,那么排名并列 $student['rank'] = $prevRank; } else { $student['rank'] = $rank; $prevRank = $rank; } $prevScore = $student['zongfen']; $rank += 1; } // 输出结果 foreach ($students as $student) { printf("学生 %s 在 %s 的排名是 %d\n", $student['name'], $student['school'], $student['rank']); } ?>评论 打赏 举报解决 1无用