Мой коллега собрал SQL-запрос, который выводит следующий массив:
Array
(
[0] => Array
(
[total_completion_time] => 163
[promotion_id] => 1
[challenge_id] => 1
[userId] => 2
[display_name] => laxadmin
[completion_time] => 163
[completion_time_mins] => 0
[completion_time_secs] => 0
[completion_time_mmss] => 0:0
[score] => 40
)
[1] => Array
(
[total_completion_time] => 345
[promotion_id] => 1
[challenge_id] => 1
[userId] => 1
[display_name] => siteadmin
[completion_time] => 345
[completion_time_mins] => 5
[completion_time_secs] => 45
[completion_time_mmss] => 5:45
[score] => 50
)
[2] => Array
(
[total_completion_time] => 345
[promotion_id] => 1
[challenge_id] => 1
[userId] => 3
[display_name] => mdeville
[completion_time] => 345
[completion_time_mins] => 0
[completion_time_secs] => 0
[completion_time_mmss] => 0:0
[score] => 0
)
[3] => Array
(
[total_completion_time] => 943
[promotion_id] => 1
[challenge_id] => 1
[userId] => 4
[display_name] => Matthew DeVille
[completion_time] => 163
[completion_time_mins] => 2
[completion_time_secs] => 43
[completion_time_mmss] => 2:43
[score] => 90
)
[4] => Array
(
[total_completion_time] => 943
[promotion_id] => 1
[challenge_id] => 3
[userId] => 4
[display_name] => Matthew DeVille
[completion_time] => 90
[completion_time_mins] => 1
[completion_time_secs] => 30
[completion_time_mmss] => 1:30
[score] => 30
)
[5] => Array
(
[total_completion_time] => 943
[promotion_id] => 1
[challenge_id] => 4
[userId] => 4
[display_name] => Matthew DeVille
[completion_time] => 90
[completion_time_mins] => 1
[completion_time_secs] => 30
[completion_time_mmss] => 1:30
[score] => 35
)
[6] => Array
(
[total_completion_time] => 943
[promotion_id] => 1
[challenge_id] => 5
[userId] => 4
[display_name] => Matthew DeVille
[completion_time] => 300
[completion_time_mins] => 5
[completion_time_secs] => 0
[completion_time_mmss] => 5:0
[score] => 30
)
[7] => Array
(
[total_completion_time] => 943
[promotion_id] => 1
[challenge_id] => 6
[userId] => 4
[display_name] => Matthew DeVille
[completion_time] => 300
[completion_time_mins] => 5
[completion_time_secs] => 0
[completion_time_mmss] => 5:0
[score] => 20
)
)
Он также предоставил следующий код для циклического просмотра результатов и создания таблицы со следующими заголовками:
пользователь |
вызов 1 раз |
вызов 2 раза |
вызов 3 раза |
вызов 4 раз |
вызов 5 раз |
вызов 6 раз |
вызов 7 раз |
общее время |
<?php
for ($x=0; $x < $results_length; $x++) {
$row = $results[$x]; // get next row from results
$userId = $row["userId"]; // get userId from row
// by default, we'll expect to continue to build UI display for current user
$beginNewUserDisplay = false;
if ($userId !== $currentUserId) {
// if not first user, we need to close the current table row
if ($currentUserId != -1) {
// if we haven't filled in one table cell for each possible result
// do that now...
while ($challengesCtr <= $TOTAL_CHALLENGES_CT) {
// this means we're missing results we need
// to properly display the table so we add in blank cells
echo "<td></td>";
$challengesCtr = $challengesCtr+1;
}
// display total time
// TODO: verify this is the correct display value
echo "<td>".$row["total_completion_time"]. "-" .$row['userId']."</td>";
echo "</tr>";
}
// Regardless, we need to start a new table row
// no more results for previous user, starting UI display for new user
$currentUserId = $userId;
$beginNewUserDisplay = true;
// reset the results counter
$challengesCtr = 1;
}
if ($beginNewUserDisplay == true) {
// start UI for new User's results
echo "<tr>";
echo "<td>".$row['userId']."</td>";
echo "<td>".$row['display_name']. "-" .$row['userId']."</td>";
} else {
// continue UI for current User's results
$challengeId = $row["challenge_id"];
while ($challengesCtr < $challengeId) {
// if this executes it means we're missing results
// we need to properly display the table so we add in blank cells
echo "<td></td>";
$challengesCtr = $challengesCtr+1;
}
// echo table cell current challenge time here
// TODO: verify this is the correct display value
echo "<td>".$row['completion_time_mmss']."</td>";
// increment our results counter
$challengesCtr = $challengesCtr+1;
}
}
?>
Проблема в том, что цикл пропускает большую часть данных первого пользователя, а в таблице отсутствуют последние два столбца.
Вы можете увидеть результаты здесь: http://65.242.11.205/leaderboard/
Обычно я могу определить вложенные циклы, но этот парализует меня.