php - 动态评分表

标签 php mysql arrays sorting ranking

这是记分板的简化代码。我要构建的是一个表,它按总分自动排序,并为最低分数分配 1 的排名,并从那里递增排名,直到每个人都有一个排名。如果 2 个人的分数相同,则排名将是 T,然后是数字。

<?php
$sql_score = $mysqli->query("SELECT * from event_scoreboard WHERE workoutid = '$work_out[$workout_counter]'");
    $rowcount1=mysqli_num_rows($sql_score);     
    $array = array();
    while($objscore = $sql_score->fetch_object()) { 
        $score = $objscore->score;

        $total_score += $score * 3; 
    }

    $values = array($total_score);
    $ordered_values = $values;
    echo rsort($ordered_values);

    foreach ($values as $key => $value) {
        foreach ($ordered_values as $ordered_key => $ordered_value) {
            if ($value === $ordered_value) {
                $key = $ordered_key;
                break;
            }                          
        }
        echo $value . '- Rank: ' . ((int) $key + 1) . '<br/>';
    }
?>

下面的测试代码工作正常,但是我们如何通过将 while 条件的输出插入多维数组来实现相同的输出 前任。 $values = array($total_score);

现在,我在下面得到这个输出。它只显示数组索引['0'],这就是为什么在所有输出中排名为 1 的原因。

13087 - Rank: 1
11029 - Rank: 1
110359 - Rank: 1
17035 - Rank: 1
19702 - Rank: 1
1702 - Rank: 1
196 - Rank: 1
19 - Rank: 1
110266 - Rank: 1

根据分数显示排名的工作示例(当前为 DESC,但需要按 ASC 顺序 - 最低分数将是排名第 1)

$values = array();
$values[0] = 13389;
$values[1] = 71298;
$values[2] = 234;
$values[3] = 9069;
$values[4] = 9936;
$values[5] = 2673;
$values[6] = 234;
$values[7] = 234;
$values[8] = 11634;
$values[9] = 1470;

$ordered_values = $values;
    echo rsort($ordered_values);

foreach ($values as $key => $value) {
    foreach ($ordered_values as $ordered_key => $ordered_value) {
        if ($value === $ordered_value) {
            $key = $ordered_key;
            break;
        }                          
    }
    echo $value . '- Rank: ' . ((int) $key + 1) . '<br/>';
}

最佳答案

使用 PHP 的语法 rsort()如下:

bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] )

因此,执行行 echo rsort($ordered_values) 将在 succuss(回显为 1)或 时评估为 true false 失败(回显 0)。

如果您print_r() 您的$ordered_values 数组,您会注意到它实际上是按相反顺序排序的:

//the output I got
Array ( [0] => 71298 [1] => 13389 [2] => 11634 [3] => 9936 [4] => 9069 [5] => 2673 [6] => 1470 [7] => 234 [8] => 234 [9] => 234 ) 

意思是排名最低的数字排在最后。

注意:我假设您的实际意图与您从代码中获得的结果相反。不确定为什么不使用 rsort() 的反义词,即 sort() 来实现您想要的结果。

rsort() 更改为 sort() 会产生以下结果:

13389- Rank: 9
71298- Rank: 10
234- Rank: 1
9069- Rank: 6
9936- Rank: 7
2673- Rank: 5
234- Rank: 1
234- Rank: 1
11634- Rank: 8
1470- Rank: 4

关于php - 动态评分表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33128781/

相关文章:

javascript - 超时 - php 脚本期间加载程序

mysql - 如何编写可以得到以下结果的 SQL 查询?

php - 向mysql数据库中插入一个数组

arrays - C 中将字符串拆分为字母和数字的函数

PHP imap_append - 设置 SEEN 选项

php - PHP 中的 REST API 输出到 JSON 文件扩展

java - 如何使用binarySearch或其他方法在字符串数组中搜索字符串?

php - 如何在MySQL中获取特定值和多个值的总和

php - 在后台运行 PHPExcel 作业

python - MySQL 连接器 python 35 大型查询资源暂时不可用?