PHP排序数组联合位置

标签 php arrays

我有一组玩家,每个玩家都有很多分数。

我可以使用自定义 usort 函数轻松地按点的顺序对数组进行排序。

但是当两个玩家的分数相同时,我需要将他们排在列表中相同的获胜位置。

例如

  • 尼克 - 25 岁
  • 汤姆 - 18 岁
  • 克里斯 - 18 岁
  • 戴夫 - 16 岁
  • 詹姆斯 - 8

在这种情况下,我需要的数据是

  • 尼克 - 第一名
  • Tom -(联合)第二名
  • Chris -(联合)第二名
  • 戴夫 3rd
  • 詹姆斯四世

因此得分相同的玩家被指定为相同的排名位置。

计算这些位置的最佳方法是什么?

谢谢!

最佳答案

这会给你一个额外的修复你想要的东西:如果你有两个玩家在位置 2,下一个玩家应该在位置 4。如果你不想要这个额外的修复移动 $count++; 到 if 语句中。

$count = 0;
$position = 0;
$last_score = -1;

foreach ($players as $player)
{
    $count++;

    if ($last_score !== $player->score)
    {
        $position = $count;
    }

    $player->position = $position;
    $last_score = $player->score;
}

关于PHP排序数组联合位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48379321/

相关文章:

arrays - Ruby:在散列中分配数组值

java - 将字符串数组转换为列表 : double brackets

c - 指向字符串的动态 char 指针数组

php - 按值排序数组

php - 在 Magento 中找不到事件观察器类的函数定义

javascript - 如何将生成的 javascript pdf 文件保存到服务器的文件系统?

c - 结构输出被最后的用户输入覆盖

php - json_encode 在处理多字节子字符串时返回 false

php - php/laravel 可以批量更新()

php - 查询为空,还有其他错误