Not necessarily. You can use arrays to store the information, just make sure that you don't sort that array, because it will screw up its structure, especially when it is a 3d array.
Instead when you want to read the values for every player, that then you want to have sorted, you could use a loop like (in this examples 3 players):
player 1 has a best time of 190 sec at level 9
player 2 has best time of 200 sec at level 9
player 3 has a best time of 150 sec at level 9
level = 9
timerank = 1
set size sortarray (0,2,1)
for 1 to 3:
push to sortarray array.at(loopindex-1, level-1, timerank-1)
set sortarray at (loopindex-1, 1) to "Player "&loopindex
after that you can sort by x and end up with an array like:
150, Player 3
190, Player 1
200, Player 2
... and can work with that.
Of course you can also work with a dictionary and loops, this would reduce wasted space, as you won't have empty values. Keys could be named like "p1s1t2" (player 1, score 1, time 2) and you could use while loops to retrieve stuff, again top example:
sortarray set size 0,2,1
localvariable: counter = 1
while
dictionary has key "p"&str(counter)&"s"&str(level)&t&str(timerank) [you don't necessarily need the str(), construct is smart enough to auto-convert]
counter < maxplayernumber [infinite loops should not be able to happen with this]:
push sortarray dictionary.get("p"&str(counter)&"s"&str(level)&t&str(timerank))
set sortarray at (counter-1, 1) to "Player "&counter
counter +1
sort by x again and you'll end up with the same again:
150, Player 3
190, Player 1
200, Player 2