【问题标题】:How to serialize 2 letter sting in PHP [duplicate]如何在PHP中序列化2个字母字符串[重复]
【发布时间】:2017-06-30 15:32:03
【问题描述】:

我想做点什么-

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

那么,有没有办法做到这一点?

【问题讨论】:

标签: php arrays ascii


【解决方案1】:

您可以使用这样一个事实,即使用 ++ 递增字符串一旦到达 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

【讨论】:

  • 我认为你需要26 * 27 行; AA --&gt; ZZ plus A --&gt; Z 的字母表中的字母数
  • 好点,已编辑。我应该更加关注输出...
【解决方案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);

【讨论】:

    【解决方案3】:

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

    【讨论】:

    • 谢谢伙计..会帮助我..不知何故
    【解决方案4】:
    <?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

    【讨论】:

      猜你喜欢
      • 2010-12-08
      • 2019-06-19
      • 2023-02-22
      • 2019-01-26
      • 1970-01-01
      • 2012-06-19
      • 1970-01-01
      • 1970-01-01
      • 2020-09-29
      相关资源
      最近更新 更多