如何在PHP中对数组的索引进行排序

时间:2017-01-12 15:44:14

标签: php ranking

我需要在我的系统中排名。我有一个数组$arr = array(120,26,38,96,22);。我需要在不改变位置的情况下对索引进行排名。

我需要的输出类似于:

  

120是排名1,26排名4,38排名3,96排名2,22排名5

我试过这个,但都排名第1:

<?php
$arr = array(120,26,38,96,22);
$rank = 0;
$score=false;
$rows = 0;

foreach($arr as $sort){
    $rows++;
    if($score != $arr){
        $score = $arr;
        $rank = $rows;
    }echo $sort.' is rank '.$rank.'</br>';  
}
?>

而且我还需要数组长度是动态的。

2 个答案:

答案 0 :(得分:1)

这是一种方式:

$arr  = array(120,26,38,96,22);
$rank = $arr;
rsort($rank);

foreach($arr as $sort) {
    echo $sort. ' is rank ' . (array_search($sort, $rank) + 1) . '</br>';
}
  • 将原始数组复制为$rank并反向排序,使得键将为-1
  • 循环原始数组并在$rank中搜索返回键(排名)
  • 的值
  • 因为键从0开始添加1

或另一种可能性:

$arr  = array(120,26,38,96,22);
$rank = $arr;
rsort($rank);
$rank = array_flip($rank);

foreach($arr as $sort) {
    echo $sort . ' is rank '. ($rank[$sort] + 1) . '</br>';
}
  • 将原始数组复制为$rank并反向排序,使得键将为-1
  • 翻转$rank数组以获取值作为键并将其排名为值
  • 循环原始数组并使用该值作为$rank键获取等级
  • 因为键从0开始添加1

答案 1 :(得分:1)

这样做:

$arr=array(120,26,38,96,22);
//get a copy adn use original for original order
$result=$arr;
//sort it numeric and reverse
rsort($result,SORT_NUMERIC);
//create the result
$result = array_map(function($a){return $a+1;},array_flip($result));
//print it
print_r($result);

结果:

Array ( [120] => 1 [96] => 2 [38] => 3 [26] => 4 [22] => 5 )

获取原始订单:

$resultxt = array();
foreach($arr as $sort){
  $resulttxt[] = $sort.' is rank '.$result[$sort];  
}
print implode(', ',$resulttxt).'<br>';

array_map http://php.net/manual/en/function.array-map.php

array_flip http://php.net/manual/en/function.array-flip.php