Динамическая таблица очков

Это упрощенный код для табло. То, что я пытаюсь построить, — это таблица, которая автоматически сортирует себя по сумме баллов и присваивает ранг 1 для наименьшего балла, а приращения — оттуда до тех пор, пока все не получат ранг. Если 2 человека имеют одинаковую оценку, ранг будет Т, а затем число.

<?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/>';
}

1

Решение

Синтаксис для использования PHP rsort() как следует:

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

Итак, выполнение строки echo rsort($ordered_values) будет оценивать true на succuss (повторяется как 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
0

Другие решения

Я не понимаю, зачем вам сложность многомерного массива. Почему бы просто не использовать asort на массиве $ value? Это отсортирует массив $ value по значению от низкого до высокого и сохранит ключевые ассоциации.

0

По вопросам рекламы [email protected]