<?php
$data = array(
array('id' => 1, 'name' => 'John Snow', 'score' => 80),
array('id' => 2, 'name' => 'John Fire', 'score' => 50),
array('id' => 3, 'name' => 'John Water', 'score' => 79),
array('id' => 4, 'name' => 'John Leaf', 'score' => 80),
);
function cmp($a, $b) {
if ($a['score'] == $b['score']) {
return 0;
}
return ($a['score'] > $b['score']) ? -1 : 1;
}
uasort($data, 'cmp');
$rank = 1;
$prev = false;
foreach ($data as $i=>$d) {
if (!$prev) {
$data[$i]['rank'] = $rank;
$prev = $d['score'];
continue;
}
elseif ($prev != $d['score']) {
$rank++;
}
$data[$i]['score'] = $rank;
$prev = $d['score'];
}
print_r($data);
preferences:
35.4 ms | 402 KiB | 5 Q