如何在PHP中序列化2个字母的sting

时间:2017-06-30 15:32:04

标签: php arrays ascii

我想做一些像 -

A  = 1
B  = 2
...
...
Z  = 26
AA = 27
AB = 28
AC = 29

我使用ASCII码转换器和范围功能来做到这一点。但是没有用。在这种情况下。

<?php
    $range = range('AA','ZZ');
    print_r($range);
?>

// Returns an array A to Z not AA to ZZ

那么,有没有可能的方法呢?

4 个答案:

答案 0 :(得分:2)

您可以使用以下事实:使用++递增字符串将在到达Z时回绕到AA,依此类推:

<?php
$result = [];
$string = 'A';

for ($i = 1; $i <= 26*27; $i++) {
  $result[$string] = $i;
  $string++;
}

=

Array
(
    [A] => 1
    [B] => 2
    [C] => 3
    [D] => 4
    [E] => 5
    ...

请参阅https://eval.in/825359

答案 1 :(得分:2)

这里通过使用范围通过数组索引为每个字母赋值[0,25]来起作用。然后添加一个额外的,你很好。缺点是,这对AZA这样的东西不起作用,但你说你只需要2个字母。

    $string = 'ZZ';
    $result = 0;
    foreach (str_split(strtolower($string)) as $letter) {
        $result += array_search($letter, range('a', 'z')) + 1;
    }
    print($result);

答案 2 :(得分:0)

您可以为所有字母指定一个值。然后将字符串转换为数组,以便数组中的每个值都是一个字母。然后遍历数组,并根据字母的值对所有数组元素求和。

答案 3 :(得分:0)

<?php
$test = "AA";
$ascval = array_map('ord', str_split($test));
var_dump(implode("", $ascval));
var_dump(array_sum($ascval));

<强>收率:

string(4) "6565"
int(130)

http://sandbox.onlinephpfunctions.com/code/ceb1fa2e8cb29c9f9dbf5e6c30db9878941e34ad