首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中使用字符串生成一个“数字”?

如何在PHP中使用字符串生成一个“数字”?
EN

Stack Overflow用户
提问于 2011-02-05 17:13:40
回答 6查看 322关注 0票数 0

不使用0..9符号,而使用0..9A..Z符号

不使用base-10系统,而使用base-64系统

我想创建一个如下示例所示的函数:

next('ABC')返回'ACA‘-这是包含3个单元的下一个字符串

这就像我们有从0到9的数字,函数返回下一个数字

next2(135)返回值136 -这是下一个3位数字

我们对数字使用10进制,我想使用数字字母,这意味着36进制,并得到下一个所谓的数字

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2011-02-05 17:24:44

下面是一个函数,它生成以3为基数的字母数字系统中的下一个值:

代码语言:javascript
复制
function nextval($input, $pad = 1) {

        $map = array(0 => 'A', 1 => 'B', 2 => 'C');

        //convert letters to numbers
        $num = '';
        for ($i = 0; $i < strlen($input); $i++) {
                $num .= array_search($input{$i}, $map);
        }

        //convert the number to base 10, then add 1 to it
        $base10 = base_convert($num, 3, 10);
        $base10++;

        //convert back to base 3
        $base3 = base_convert($base10, 10, 3);

        //swap the digits back to letters
        $num = '';
        for ($i = 0; $i < strlen($base3); $i++) {
                $num .= $map[$base3{$i}];
        }

        //pad with leading A's
        while (strlen($num) < $pad) {
                $num = 'A' . $num;
        }

        return $num;

}

echo nextval('ABC', 3); //ACA

请注意,结果是"CA“,因为"ACA”与在base-10中写入"06“相同...我们通常不写前导零,所以你不会写前导“A”。

因此,我添加了一个pad参数,它允许您指定要填充的位数。使用$pad=3,你会得到"ACA“作为"ABC”的下一个。

票数 2
EN

Stack Overflow用户

发布于 2011-02-05 17:30:28

像这样的东西

代码语言:javascript
复制
<?php

function toNext($input) {
    $conv = strtr(strtolower($input), array(
        'a' => '0',
        'b' => '1',
        'c' => '2' ));
    $conv = base_convert($conv, 3, 10);
    $conv++;
    $output = base_convert($conv, 10, 3);
    $output = sprintf("%03d", $output); 
    $output = strtr((string) $output, array(
        '0' => 'a',
        '1' => 'b',
        '2' => 'c' ));
    return strtoupper($output);
}


var_dump(toNext('ABC'));
var_dump(toNext('ABA'));
票数 1
EN

Stack Overflow用户

发布于 2011-02-05 17:19:08

我现在能想到的一种方法是将字符转换为base26,然后将数字加1,然后再将其转换回来,希望你能理解。Next2应该做同样的事情,但是使用base10,这是默认的,所以这将是数字本身的+1。我期待着看到这个版本上的其他实现。

编辑:我没有注意到你的结尾有A。我真傻,竟然做那件事。那就是base3,而不是26。

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

https://stackoverflow.com/questions/4906045

复制
相关文章

相似问题

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