这是计分板的简化代码。我要构建的表是根据总分自动对自身进行排序的表,并为最低分数分配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);

现在,我在下面得到此输出。它仅显示数组index ['0'],这就是为什么在所有输出中Rank为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)将在succus(回显为true)上评估为1,而在失败(回显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/

10-09 04:22