获取数组中所有项目的密集排名和间隙排名

2023-12-11

我想使用 PHP 计算并存储数组中所有条目的密集排名和间隙排名。

我想在 PHP 中执行此操作(而不是 MySQL,因为我每周处理 100,000 到 900 个组合的动态组合,这就是为什么我不能使用 MySQL 制作那么多表。

我查找密集排名的代码有效,但间隙排名不正确。

PHP code

$members = [
    ['num' => 2, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 2, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 3, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 3, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 3, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 3, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 3, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 5, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 9, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 9, 'rank' => 0, 'dense_rank' => 0],
    ['num' => 9, 'rank' => 0, 'dense_rank' => 0]    
];

$rank=0;
$previous_rank=0;
$dense_rank=0;
$previous_dense_rank=0;
foreach($members as &$var){
    //star of rank
    if($var['num']==$previous_rank){
        $var['rank']=$rank;
    }else{
        $var['rank']=++$rank;
        $previous_rank=$var['num'];   
    }//end of rank
    
    //star of rank_dense
    if($var['num']===$previous_dense_rank){
        $var['dense_rank']=$dense_rank;
        ++$dense_rank;
    }else{
        $var['dense_rank']=++$dense_rank;
        $previous_dense_rank=$var['num'];
    }   
    //end of rank_dense
    
    echo $var['num'].' - '.$var['rank'].' - '.$var['dense_rank'].'<br>';
}
?>

我的有缺陷的输出是:

num rank dynamic rank
2 1 1
2 1 1
3 2 3
3 2 3
3 2 4
3 2 5
3 2 6
5 3 8
9 4 9
9 4 9
9 4 10

请注意,当错误发生并且数字列中有更大的数字时,它会更正该行中的错误。当数字从 3 变为 5 时看到。


鉴于您的结果已经按升序排序......

  • 对于密集排名,您只需要在遇到新分数时增加计数器。

  • 对于差距排名,您需要无条件增加计数器并使用所有具有相同分数的成员的计数器值。

??=是“空合并赋值”运算符(“组合运算符”的一种)。如果左侧操作数未声明或已声明,则仅允许执行/使用右侧操作数null。这是一种无需编写经典代码即可执行条件赋值的技术if健康)状况。

Code: (Demo)

$denseRank = 0;
$gappedRank = 0;
foreach ($members as &$row) {
    $denseRanks[$row['num']] ??= ++$denseRank;
    $row['dense_rank'] = $denseRanks[$row['num']];
    
    ++$gappedRank;
    $gappedRanks[$row['num']] ??= $gappedRank;
    $row['rank'] = $gappedRanks[$row['num']];
    
    // for better presentation:
    echo json_encode($row) . "\n";
}

Output:

{"num":2,"rank":1,"dense_rank":1}
{"num":2,"rank":1,"dense_rank":1}
{"num":3,"rank":3,"dense_rank":2}
{"num":3,"rank":3,"dense_rank":2}
{"num":3,"rank":3,"dense_rank":2}
{"num":3,"rank":3,"dense_rank":2}
{"num":3,"rank":3,"dense_rank":2}
{"num":5,"rank":8,"dense_rank":3}
{"num":9,"rank":9,"dense_rank":4}
{"num":9,"rank":9,"dense_rank":4}
{"num":9,"rank":9,"dense_rank":4}

根据记录,如果您正在处理大量数据,我将使用 SQL 而不是 PHP 来完成此任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

获取数组中所有项目的密集排名和间隙排名 的相关文章

  • Arrayadapter.getcount 空点异常

    我得到以下堆栈跟踪 下面是完整的副本 这几乎没有或根本没有表明大型应用程序中出现错误时的位置 并且用户反馈除了 崩溃 之外什么也没有 我能做些什么来进一步查明这一点吗 java lang NullPointerException at an
  • Ajax 没有将我重定向到下一页

    我正在尝试将单击的图像的 ID 传递到下一页 当我开发代码时 它没有将我重定向到下一页 当我单击 F12 并检查网络中的 POST 时 它显示变量已正确传递到下一页 如附图所示 但它没有将我重定向到下一页 所以现在我知道变量在下一页中正确传
  • 合并 JavaScript 数组中的重复项

    我有一个愚蠢的问题 乍一看似乎很容易解决 但结果却很棘手 我有一个对象数组 每个对象都有两个属性 id 和 value id 2 value 10 id 4 value 3 id 2 value 2 id 1 value 15 我想编写一个
  • 简单的 PHP 回显代码不起作用

    这是我的 html 和 php 脚本 h1 Bob s Auto Parts h1 table width 100 tr tr table 为什么这个输出会出现一个 gt 我希望它是 这有效 仅有的 这是输出 鲍勃的汽车零件 鲍勃
  • 如何让Apache服务index.php而不是index.html?

    如果我将以下行放入index html文件 使 Apache 包含index php file 参观index html页面向我显示了这个 这是为什么 为什么它实际上不包含 PHP 文件 正如其他人指出的那样 您很可能没有 html设置为处
  • 在 PHP 中比较两个对象的最快方法是什么?

    假设我有一个对象 在本例中为 User 对象 并且我希望能够使用单独的类来跟踪更改 用户对象不必以任何方式改变它的行为才能发生这种情况 因此 我的单独的类创建它的 干净 副本 将其存储在本地某个位置 然后可以将 User 对象与原始版本进行
  • 编辑 HTACCESS 文件以防止直接访问特定文件夹中的特定文件

    我试图阻止直接访问子文件夹中的特定文件 我意识到这个论坛上有很多描述类似问题的主题 但是 我的似乎有点尴尬 由于我已经存在 HTACCESS 文件 这是文件的文件路径 www example com PRINCIPAL PROJECTS m
  • 如何将我的 init 函数中的代码集中到所有控制器中?

    public function init this gt view gt user Zend Auth getInstance gt getIdentity this gt view gt siteName Zend Registry ge
  • 在 Go 中,如何将结构体转换为字节数组?

    我有一个我定义的结构实例 我想将其转换为字节数组 我尝试了 byte my struct 但这不起作用 另外 我还被指出二进制包 http golang org pkg encoding binary 但我不确定我应该使用哪个函数以及应该如
  • WordPress 包含 SVG 文件错误

    我使用 PHP 和 WordPress 在本地主机上 我可以毫无问题地包含 SVG 文件 但在实时服务器上 我尝试包含一个 SVG 文件以便能够使用 CSS 对其进行样式设置 我收到此错误消息 Parse error syntax erro
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • PHP 扩展开发入门 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 请推荐有关 PHP 低 级 modules 编程接口的帮助文章或教程 搜索我的书签 我发现的唯一链接是
  • 如何在 Zend MVC 中实现 SSL

    我之前已经通过使用特定的安全文件夹 例如服务器上的 https 文件夹与 http 文件夹 实现了安全页面 我已经开始使用 Zend Framework 并希望应用程序的某些部分 例如登录 使用 https 我在谷歌上搜索过 甚至在这里搜索
  • Facebook PHP SDK - 如何获取访问令牌?

    我正在尝试从我的应用程序在用户的 Facebook 墙上发帖 用户授予应用程序在他的墙上发布的权限 并且我在数据库中有用户ID 我需要自动发送帖子 而无需用户再次登录 我的代码是 try require once dirname FILE
  • 按范围迭代数组

    我有一个数组 1 2 3 4 5 6 100 我希望将此数组迭代 5 次 具体来说 取数组的前 5 个数字并获取平均值 继续处理接下来的 5 个数字并获取平均值 依此类推 我尝试过多种方法 例如Dequeue和 for 循环但未能获得所需的
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • JavaScript 中数组的 HTML 数据列表值

    我有一个简单的程序 它必须从服务器上的文本文件中获取值 然后将数据列表填充为输入文本字段中的选择 为此 我想要采取的第一步是我想知道如何动态地将 JavaScript 数组用作数据列表选项 我的代码是
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • ZF3/2 - 如何捕获 EVENT_DISPATCH 侦听器中引发的异常?

    有什么方法可以在 EVENT DISPATCH 监听器中抛出异常吗 class Module public function onBootstrap EventInterface event application event gt get
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 按下按钮时循环播放功能? Unity3d C#

    所以 我有一个对象 当我按下旋转按钮时 我希望它旋转 当我按下停止按钮时 我希望它停止 当它处于 void Update 中时它旋转得很好 但是当它处于它自己的函数中时 它只执行一次 我尝试使用循环但仍然没有运气 有人可以帮我吗 Code
  • 使用 ob_start 时如何重定向 php 中的标头位置?

    When condition是真的我明白了 Hello 我想要的是当 condition是真的 那就去谷歌吧 我不知道发生了什么 你能解释一下或者给我一个解决方案吗 Thanks 只需添加ob end clean 在标头调用之前
  • 如何在刷新后保持复选框处于选中状态?

    我需要向此代码添加什么 才能使复选框即使在刷新页面后也保持选中状态 代码示例或解释将不胜感激这是该项目的完整代码 https github com Orelso Project notes 如果您需要我添加代码的任何其他部分 请告诉我 im
  • Android 模拟器错误:- 执行 /system/bin/e2fsck 失败:没有这样的文件或目录

    我正在尝试运行我的第一个 Android 应用程序Android Emulator on API 19 The Emulator开始但没有任何反应 意味着主屏幕没有出现 这是我的第二周Android 这是 log cat 的前两行 02 2
  • Ctypes:无法导入windll

    我在 Windows 7 64 位上运行 Python 2 7 32 位 Anaconda 我想使用 ctypes 进行 win32 API 调用 但我有一个非常奇怪的问题 我可以import ctypes 但不是import ctypes
  • 如何将 P 元素内的文本放在图像旁边?

    这是我的代码 img src images example jpg width 70px p This is some example text that i want next to the image on the right hand
  • QtDesigner 和 PySide:QTableWidget 无法访问

    我在 QtDesigner 中制作了一个表单 该表单在该函数的帮助下从 PySide 加载 widget loader load file parent 但是 QTableWidget 带有 objectNname buffer table
  • 如何将响应数据设置到 TodayExtension 小部件中

    尝试从服务访问响应数据以显示到 TodayExtensions 小部件中 import Foundation struct MarketIndex Codable let indicesName String let indicesValu
  • 使用rest api时选择Azure事件中心的分区

    我正在尝试使用 python 和其余 API 向 Azure 事件中心发送消息 经过一些失败的实验后 我找到了工作代码 见下文 但我希望能够选择将事件发送到哪个分区 使用其余 API 是否可以实现这一点 如果可以 应该如何完成 user b
  • 参数分配默认值(=默认值)意味着什么? [复制]

    这个问题在这里已经有答案了 我试图理解前置条件函数并遇到 default 快速谷歌和扫描指南没有带来任何相关结果 有人可以向我解释一下吗 谢谢 func precondition condition autoclosure gt Bool
  • API-21 上的 Fragment 事务替换仍然落后

    我正在开发一个使用片段的应用程序 上周我的测试设备进行了棒棒糖更新 当我在棒棒糖设备上测试我的应用程序时 我发现 Fragment Transaction 的替换方法无法正常工作 尽管在 Kitkat 版本上一切正常 但它在 Lollipo
  • 嵌套 .pth 文件或从网络加载额外的站点目录

    目标是拥有一个通用目录 我可以在其中添加网络上的包 这些包会自动添加到sys path无需运行site addsitedir or sys path append每次我导入所述包时 有没有办法做到这一点 背景 我有一个小型用户网络 他们都需
  • 更改后无法保存 Jenkins 作业,没有可见错误

    前提 詹金斯 2 277 4Ubuntu 20 04 2 LTSopenjdk版本 11 0 11 2021 04 20 Problem 我有一份自由式工作 第一次保存所有已完成的更改 此时 保存 和 应用 按钮位于页面中底部 下次如果我进
  • NOPL在x86系统中做什么?

    NOPL在x86机器中的作用是什么 感觉好像什么也没做 但是为什么总是在汇编代码中呢 NOP是一个单字节 不执行任何操作 的操作 实际上是 无操作 NOPW NOPL 等相当于什么都不做 但会占用字和长字节 e g NOP 1byte op
  • 为什么/哪里出现错误“ 调用方法 Location.toString 的权限被拒绝”

    EDIT 我在回复评论时添加了澄清 在可能且有意义的地方 这些添加的修饰位于斜体字体样式 我已经在 Firefox 群组以及 SO 上发布了这个问题 关于 SO 至少有 25 个相关问题 其中一些代表性问题是 闪虫 跨域问题 只是一个谜 F
  • HTML / VBA 下拉菜单

    我在 VBA 和 HTML 例程方面遇到了一些问题 我必须从链接中选择https www betexplorer com next soccer 排序依据 下拉菜单并选择 联赛 项 我无法通过 VBA 执行此操作 这是我写的代码 Sub S
  • Python:哪个命令会增加 Windows 上打开文件的数量?

    关于这个主题似乎有很多问题 我似乎找不到我应该在 python 脚本中调用什么来增加打开文件限制 我知道我需要使用 setmaxstdio在 C 级别 但我不知道如何在 python 中调用它 有任何想法吗 尝试使用win32file fr
  • BSL(如何设计程序):如何将代码从单独的文件导入到定义区域?

    我对 BSL 有疑问 我想将我的代码分成单独的辅助文件并使用 require auxiliary function rkt 首先将分离的代码导入到定义区域 然而它并没有像想象的那样工作 虽然没有给出明确的错误 但似乎 DrRacket 根本
  • phpMailer gmail 垃圾邮件

    我使用 phpMailer 但有一个问题 当收件人是 Gmail 或 Yahoo 时 我的电子邮件最终会进入垃圾邮件文件夹 这怎么可能 代码是这样的 mail gt AddCustomHeader Reply to email protec
  • 获取数组中所有项目的密集排名和间隙排名

    我想使用 PHP 计算并存储数组中所有条目的密集排名和间隙排名 我想在 PHP 中执行此操作 而不是 MySQL 因为我每周处理 100 000 到 900 个组合的动态组合 这就是为什么我不能使用 MySQL 制作那么多表 我查找密集排名