Я бы сделал что-то вроде:
function chunk_top_n($scores, $limit)
{
arsort($scores);
$current_score = null;
$rank = array();
$n = 0;
foreach ($scores as $person => $score)
{
if ($current_score != $score)
{
if ($n++ == $limit) break;
$current_score = $score;
$rank[] = array();
$p = &$rank[$n - 1];
}
$p[$person] = $score;
}
return $rank;
}
Он сортирует массив, затем создает пронумерованные группы.Он сломается, как только будет достигнут предел.
Вы можете сделать это с меньшим количеством кода, если вы используете счет в качестве ключа массива, но преимущество вышеупомянутого подхода заключается в том, что он создает массив именно такВы хотите это сделать в первый раз.
Вы также можете передать $scores
по ссылке, если не возражаете против сортировки оригинала.