如何制作排行榜

时间:2020-11-12 21:13:45

标签: php arrays

大家好,我刚刚用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>";
    }

    
}

现在,我必须查看主列表中是否有得分方面的平局,如果它是真实的,那么最快的获胜者,如果有得分方面的平局以及我们按他们的名字订购的时间

2 个答案:

答案 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>

Demo on 3v4l.org