首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组比较,得到数字的秩

数组比较,得到数字的秩
EN

Stack Overflow用户
提问于 2015-05-03 13:24:40
回答 2查看 116关注 0票数 1

我有一组数字,目的是计算排列的概率,我需要比较结果。

代码语言:javascript
复制
1|      974407      |
 |---------|--------|
2| 97440x  | x74407 |
3| 9744xx  | xx4407 |
4| 974xxx  | xxx407 |
5| 97xxxx  | xxxx07 |

这是我想比较的信息的格式。它是数组格式的。该信息是从其他网站爬来的,订单不能更改。

代码语言:javascript
复制
$data = [974407,97440,74407,9744,4407,974,407,97,07]

我要知道军衔。例如:

代码语言:javascript
复制
974123 - rank 4
197400 - no rank
974123 - is not rank 5

更新

感谢mephisto123发布了代码示例,下面是我如何调用它的方式。我真的不擅长数学,当我调用URL时,我也不知道为什么会返回-1。

代码语言:javascript
复制
http://localhost:8000/rank/974123

我也需要从函数中得到排名。

代码语言:javascript
复制
    public function theRank($value){
        $data = [974407,97440,74407,9744,4407,974,407,97,07];
        $rank = Helper::GetRank($data, $value);
        echo $value . " = " . $rank;
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-05-03 13:41:49

代码语言:javascript
复制
function GetRank($data, $value) 
{
    if ($value == $data[0]) return 1;
    $digits = strlen(strval($value));
    $len = sizeof($data);

    for ($i = 1, $div = 10, $mod = pow(10, $digits - 1); $i < $len; $i += 2, $div *= 10, $mod /= 10) {
        if ($data[$i] == intval($value / $div)) break;
        if ($data[$i + 1] == intval($value % $mod)) break;
    }
    if ($i >= $len) return -1;
    return ($i + 3) >> 1;
}
票数 1
EN

Stack Overflow用户

发布于 2015-05-03 13:32:58

我认为你应该做的是在数组上循环,并使用模和除法运算符得到不同的数字集,然后将它们与另一个数组进行比较,该数组持有不同的等级,以得到该特定数字的秩。

例如,974123 / 1000将得到974作为结果,您可以将其与一个包含不同等级模板的数组进行比较,并获得该数字的位置,这将构成排名。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/30014329

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档