首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取字符数的PHP函数

问获取字符数的PHP函数
EN

Stack Overflow用户
提问于 2013-01-16 20:30:30
回答 5查看 432关注 0票数 6

如何编写一个函数来给出传递给它的字符的编号?

例如,如果函数名称是GetCharacterNumber,并且我将B传递给它,那么它应该为我提供2

代码语言:javascript
复制
GetCharacterNumber("A") // should print 1
GetCharacterNumber("C") // should print 3
GetCharacterNumber("Z") // should print 26
GetCharacterNumber("AA") // should print 27
GetCharacterNumber("AA") // should print 27
GetCharacterNumber("AC") // should print 29

有没有可能做到这一点?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-01-16 20:44:12

效率不是很高,但可以完成工作:

代码语言:javascript
复制
function get_character_number($end) 
{
    $count = 1;
    $char = 'A';
    $end = strtoupper($end);
    while ($char !== $end) {
        $count++;
        $char++;
    }
    return $count;
}

echo get_character_number('AA'); // 27

demo

这是因为当你得到像$char = 'A'和$char++这样的东西时,它会变成'B',然后变成'C','D',…'Z','AA','AB‘等等。

注意,$end越长,这将变得越慢。对于超出'ZZZZ‘(475254次迭代)的任何东西,或者如果你需要很多这样的查找,我不推荐这样做。

性能更好的替代方案是

代码语言:javascript
复制
function get_character_number($string) {
    $number = 0;
    $string = strtoupper($string);
    $dictionary = array_combine(range('A', 'Z'), range(1, 26));
    for ($pos = 0; isset($string[$pos]); $pos++) {
        $number += $dictionary[$string[$pos]] + $pos * 26 - $pos;
    }
    return $number;
}

echo get_character_number(''), PHP_EOL; // 0
echo get_character_number('Z'), PHP_EOL; // 26
echo get_character_number('AA'), PHP_EOL; // 27

demo

票数 3
EN

Stack Overflow用户

发布于 2013-01-16 20:34:04

有一个名为ord的函数可以给出字符的ASCII码。

代码语言:javascript
复制
ord($chr) - ord('A') + 1

为您提供一个字符的正确结果。对于较长的字符串,可以使用循环。

代码语言:javascript
复制
<?php
    function GetCharacterNumber($str) {
        $num = 0;
        for ($i = 0; $i < strlen($str); $i++) {
            $num = 26 * $num + ord($str[$i]) - 64;
        }
        return $num;
    }
    GetCharacterNumber("A"); //1
    GetCharacterNumber("C"); //3
    GetCharacterNumber("Z"); //26
    GetCharacterNumber("AA"); //27
    GetCharacterNumber("AC"); //29
    GetCharacterNumber("BA"); //53
?>
票数 11
EN

Stack Overflow用户

发布于 2013-01-16 20:36:11

使用range和strpos:

代码语言:javascript
复制
$letter = 'z';
$alphabet = range('a', 'z');
$position = strpos($alphabet, $letter);

对于双字母(例如zz),您可能需要使用自定义函数创建自己的字母表:

代码语言:javascript
复制
$alphabet = range('a', 'z');
$dictionary = range('a','z');
foreach($alphabet AS $a1){
    foreach($alphabet AS $a2) {
        $dictionary[] = $a1 . $a2;
    }
}

然后用$dictionary代替$alphabet。

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

https://stackoverflow.com/questions/14358548

复制
相关文章

相似问题

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