大家好,我刚刚用php编写了此代码,在该代码中,它列出了所有学生的列表,以及他们的得分从高到低,然后根据得分显示前3名。
<?php
$Turma = array(
array("name" => "Diogo", "score" => "100", "time" => "6" ),
array("name" => "Joao","score" => "500", "time" => "3" ),
array("name" => "Miguel", "score" => "125", "score" => "8" ),
array("name" => "Daniela", "score" => "105", "time" => "7" ),
array("name" => "Joana", "score" => "100", "time" => "6" ),
array("name" => "Diogo", "score" => "275", "time" => "4" ),
array("name" => "Francisco", "score" => "300", "time" => "9" ),
array("name" => "Ines", "score" => "650", "time" => "2" ),
array("name" => "Dionisio", "score" => "101", "score" => "10" ),
array("name" => "Ricardo", "score" => "200", "score" => "8" ),
array("name" => "Fabio", "score" => "201", "score" => "11" ),
array("name" => "Tiago","score" => "50", "score" => "13" ),
array("name" => "Carolina", "score" => "150", "time" => "5" ),
array("name" => "Rui", "score" => "130", "time" => "3" ),
array("name" => "Luisa", "score" => "1000", "time" => "1" ),
);
usort($Turma, function($a,$b){
return $b["score"] - $a["score"];
});
foreach($Turma as $key => $value) {
$position = $key + 1;
echo "{$position}: {$value['nome']} : {$value['score']} <br>";
}
echo "<br>";
echo "WINNERS!! <br> ";
foreach($Turma as $key => $value) {
$position = $key + 1;
if ($position < 4) {
echo "{$position}: {$value['nome']} : {$value['score']} <br>";
}
}
现在,我必须查看主列表中是否有得分方面的平局,如果它是真实的,那么最快的获胜者,如果有得分方面的平局以及我们按他们的名字订购的时间
答案 0 :(得分:0)
只要分数差为0,只需在usort函数中添加一个子句即可比较时间。
function($a, $b){
$diff = doubleval($b["score"]) - doubleval($a["score"]);
if($diff != 0) return $diff;
return doubleval($b["time"]) - doubleval($a["time"]);
}
顺便说一句,您的某些数组条目似乎具有重复的分数键,而不是分数和时间键。
array("name" => "Miguel", "score" => "125", "score" => "8" ),
答案 1 :(得分:0)
您的代码已接近;您只需要在usort
(和time
)字段相等时更改name
中的回调以考虑score
(和time
)字段:
usort($Turma, function ($a, $b) {
if ($a['score'] != $b['score']) return $b['score'] - $a['score'];
if ($a['time'] != $b['time']) return $a['time'] - $b['time'];
return strcmp($a['name'], $b['name']);
});
echo "<br>";
echo "WINNERS!! <br> ";
foreach ($Turma as $key => $value) {
if ($key == 3) break;
$position = $key + 1;
echo "{$position}: {$value['name']} : {$value['score']} <br>";
}
输出(用于您的示例数据):
<br>WINNERS!! <br> 1: Luisa : 1000 <br>2: Ines : 650 <br>3: Joao : 500 <br>