从数组获取数据排名

时间:2018-08-22 10:16:01

标签: php arrays

我有一个数组

$data = array(
  'sam' => 40,
  'james' => 40,
  'sunday' => 39,
  'jude' => 45
);

我想按值对数组中的名称进行排序,并按以下数组的方式返回其排序顺序:

$final_data = array(
  'sam' => 2,
  'james' => 2,
  'sunday' => 4,
  'jude' => 1
);

由于jude的值最高,因此它们得到的值1samjames并列第二,因此他们都得到23被跳过,因为没有人排在第三位)。 sunday的得分最高,为第4

1 个答案:

答案 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
}

https://3v4l.org/4YvH9

使用三个值40它将返回:

array(5) {
  ["jude"] => 1
  ["sam"] => 2
  ["james"] => 2
  ["tom"] => 2
  ["sunday"] => 5
}