具有逻辑序列

时间:2015-05-29 07:30:32

标签: php

我有这个数字,目前将数字与字母相连:

1-26 = A-Z

但还有更多,27 = AA和28 = AB等...

所以基本上当我这样做时:

var_dump($array[2]); //shows B
var_dump($array[29]); //shows AC

现在这个阵列我自己做了,但它变得太长了。有没有办法真正实现这一点,直到我们说32?我知道有chr但我不认为我可以使用它。

有没有一种更简单的方法来实际获得这个而不使用太长的数组?

3 个答案:

答案 0 :(得分:3)

以这种方式计算它的速度较慢,但​​你可以利用PHP允许你以与数字相同的方式增加字母的事实,Perl风格:

login

答案 1 :(得分:1)

这是您要查找的代码:

<?php 
    $start = "A";
    $max = 50;

    $result = array();
    for($i=1; $i<=$max; $i++) {
        $result[$i] = $start++;
    }

    print_r($result);
?>

参考:http://www.xpertdeveloper.com/2011/01/php-strings-unusual-behaviour/

答案 2 :(得分:1)

这应该适合你:

即使没有任何循环。首先,我计算字母表(26)进入数字的次数。有了这个,我定义它到str_repleat() A的次数。然后我简单地减去这个数字并用剩下的数字计算字母表中的数字。

/* Load some data from binary file */
template <typename T>
int deSerializeFromBinaryFile( const char* filename, int& sizeOfDataType,
                               T& someValue, vector<T>& someVector )
{
    ifstream file( filename, ios::in | ios::binary );

    if ( file.is_open() )
    {
        boost::archive::text_iarchive ia(file);

        ia & sizeOfDataType;
        ia & someValue;
        ia & someVector;

        file.close();

        return 0;
    } else {
        return 1;
    }
}

输出:

<?php

    function numberToLetter($number) {
        $fullSets = (($num = floor(($number-1) / 26)) < 0 ? 0 : $num);
        return str_repeat("A", $fullSets) . (($v = ($number-$fullSets*26)) > 0 ? chr($v+64) : ""); 
    }

     echo numberToLetter(53);

?>