【问题标题】:how to rank array's index in PHP如何在PHP中对数组的索引进行排名
【发布时间】:2017-01-12 15:44:13
【问题描述】:

我需要在我的系统中排名。我有一个数组$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>';  
}
?>

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

【问题讨论】:

  • 你有什么样的rank逻辑?
  • 我会通过创建 $arr 数组的第二个副本然后对其进行排序,然后为未排序数组中的每个值找到排序数组中的索引 # .. 可能有几十种方法可以做到这一点见php.net/manual/en/ref.array.php
  • 如果所有职位都是唯一的,请执行以下操作:sort($arr); $result = array_map(function($a){return $a+1;},array_flip($arr));

标签: php ranking


【解决方案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 中搜索该值,返回键(排名)
  • 加 1,因为键从 0 开始

或者另一种可能性:

$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键获取排名
  • 加 1,因为键从 0 开始

【讨论】:

  • 它非常简单而且有效!非常感谢您的回答和解释
【解决方案2】:

这样做:

$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

【讨论】:

  • 除非他们想要以原始顺序打印原始数组值120,26,38,96,22
  • 非常感谢你给我一个答案它也有效..
猜你喜欢
  • 1970-01-01
  • 2011-12-17
  • 2011-11-17
  • 1970-01-01
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多