php - 存在关系时如何将排名编号分配给数组

标签 php

在尝试为存在关系的数组中的数值分配排名时,我很难知道从哪里开始。因此,例如,我需要像下面这样转换一个数组:

myarray = (4,76,34,13,34)

进入另一个数组,如:

myarray2 = (1,5,3.5,2,3.5)

基本上,当相同的数字在数组中出现不止一次时,分配给这些数字的排名是排名的平均值。因此,这两个 34 并没有排在第 3 位和第 4 位,而是都被指定为 3.5。同样,如果 34 有 3 个副本,则分配的 3 个等级将除以 3。任何帮助将不胜感激!

非常感谢,

亚当

最佳答案

我玩得很开心!

function rank($input) 
{
  $output = array();
  $ranking = $input; sort($ranking); $ranking = array_flip($ranking);
  $last_val = -1;
  foreach($ranking as $key => $val){
    $repetitions = ($val-$last_val-1);
    $last_val = $val;
    if($repetitions) {    
      $ranking[$key] = (($val*($repetitions+1))-($repetitions+1)*(($repetitions)/2))/($repetitions+1)+1 ;
    } else {
      $ranking[$key] = $val+1;
    }
  }
  foreach($input as $key => $val){
    $output[$key] = $ranking[$val];
  }
  return $output;
}

像这样使用它:

$a = array(4,76,34,13,34);    
$c = rank($a);
print_r($c);

将输出:

Array
(
    [0] => 1
    [1] => 5
    [2] => 3.5
    [3] => 2
    [4] => 3.5
)

这与:

Array(1, 5, 3.5, 2, 3.5)

正如预期的那样!

关于php - 存在关系时如何将排名编号分配给数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3463732/

相关文章:

javascript - 通过 Ajax 请求以表单打印数据输入不起作用

php - 如何清除 jquery 中幻灯片上的表单值?

php - Jquery Submit() 基于php脚本返回值的html表单

php - 当结果为空时,“SELECT FOUND_ROWS()”返回至少 1

php - 我可以使用 PHP 随机字符串随机播放获得的不同字符串的数量

php - 用户 'admin' @'localhost' 的 MySQL 访问被拒绝(使用密码 : YES)

php - foreach 的限制结果

javascript - 类型错误:传递给 Illuminate\Database\Grammar::parameterize() 的参数 1 必须是数组类型,给定字符串

php - 如何在php中与ZK考勤机数据库进行交互?

php - 合并 json 字符串的唯一键的值