我有一个数组
$data = array(
'sam' => 40,
'james' => 40,
'sunday' => 39,
'jude' => 45
);
我想按值对数组中的名称进行排序,并按以下数组的方式返回其排序顺序:
$final_data = array(
'sam' => 2,
'james' => 2,
'sunday' => 4,
'jude' => 1
);
由于jude
的值最高,因此它们得到的值1
。 sam
和james
并列第二,因此他们都得到2
(3
被跳过,因为没有人排在第三位)。 sunday
的得分最高,为第4
答案 0 :(得分:0)
您可以按相反的顺序循环数组,并按如下方式计算位置/排名:
$data = array('sam'=>40, 'james'=>40, 'sunday'=>39, 'jude'=>45);
arsort($data); // sort reverse order
$i = 0;
$prev = "";
$j = 0;
foreach($data as $key => $val){ // loop array
if($val != $prev){ // if values are the same as previous
$i++; // add one
$i += $j; // add counter of same values
$j=0;
}else{
$j++; // this is if two values after eachother are the same (sam & james)
}
$new[$key] = $i; // create new array with name as key and rank as position
$prev = $val; // overwrite previous value
}
var_dump($new);
输出:
array(4) {
["jude"] => 1
["sam"] => 2
["james"] => 2
["sunday"] => 4
}
使用三个值40它将返回:
array(5) {
["jude"] => 1
["sam"] => 2
["james"] => 2
["tom"] => 2
["sunday"] => 5
}