php 排名算法支持重复排名 可刷新运行 刷新

代码:

$arr = [
    [
        'id'=>1,
        'score'=>10,
    ],
    [
        'id'=>2,
        'score'=>30,
    ],
    [
        'id'=>3,
        'score'=>50,
    ],
    [
        'id'=>4,
        'score'=>50,
    ]
];

array_multisort(array_column($arr,'score'),SORT_ASC,$arr);

$results = array_slice($arr, 0, 3, true);
$length = count($arr);
$resultLength = count($results);

//$resultLength 比 $length小说明$arr 的还有元素,否则它们俩就相等了。然后比较key和key+1的值。极限是所有的人都和第三名相同,自行判断是否需要所有人都胜出,来限制 $resultLength 的长度

while($resultLength<$length &&$results[$resultLength-1]['score']==$arr[$resultLength]['score']){
    array_push($results,$arr[$resultLength]);
    $resultLength = count($results);
}

$ifWinner = false;
$id=1;
if(in_array($id,array_column($results,'id'))){
   $ifWinner = true;
}

var_export($results);
echo '<br>';
var_export($ifWinner);

输出:

array (
  0 => 
  array (
    'id' => 1,
    'score' => 10,
  ),
  1 => 
  array (
    'id' => 2,
    'score' => 30,
  ),
  2 => 
  array (
    'id' => 3,
    'score' => 50,
  ),
  3 => 
  array (
    'id' => 4,
    'score' => 50,
  ),
)
true