动态评分表

时间:2015-10-14 14:56:03

标签: 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);

现在,我在下方输出此输出。它只显示数组索引[&#39; 0&#39;],这就是所有输出中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/>';
}

2 个答案:

答案 0 :(得分:0)

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

$ javac Legacy.java
Legacy.java:11: error: stream() in Legacy cannot implement stream() in MyCollection
    public void stream()
                ^
  return type void is not compatible with Stream<String>
1 error

因此,执行行bool rsort ( array &$array [, int $sort_flags = SORT_REGULAR ] ) 将评估为echo rsort($ordered_values)上的成功(回复为true)或1失败(回显false)。< / p>

如果你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()

答案 1 :(得分:0)

我不明白为什么你需要多维数组的复杂性。为什么不在$ value数组上使用asort?这将按值从低到高对$ value数组进行排序,并保持关键关联。