PHP将字符串主键转换为数字表示形式

时间:2018-04-16 16:43:36

标签: php

我从表中获取此ID:

" B0AL02087"

如何将此字母数字ID转换为intergre数字表示?我期待" B0AL02087"类似于" 2011202087"。

我找到了一种方法,使用字符串范围和字符串拆分,字母表中的字母索引会切换键中的字母:

Country

但是这种方法只有在指定$ arr的索引时才有效,这意味着当表格中的id格式发生变化时,它不起作用,例如:

" BBAL02087"

现在我们在字符串的开头有两个字母而不是字母和第一个字符串。我可以编写一堆if语句来检查每个索引是否包含一个数字。我只是不确定是否有更好的方法来做到这一点。

2 个答案:

答案 0 :(得分:4)

不确定您要实现的目标,但使用您提供的示例,您只需使用:

str_replace(range('A', 'Z'), range(1, 26), Syour_id)

B0AL02087将返回:2011202087

BBAL02087将返回:2211202087

答案 1 :(得分:0)

正如我在之前的评论中所考虑的那样,执行此转换的最终方式是从基础转换为基础,转换为无效碰撞

this article谈论将数字从基数转换为另一个,以及从任何基数转换为十进制基数10的描述。我已经使用实现了解决方案的解决方案基数36,即0-9 A-Z ,数字到十进制10,可以很容易地转换为代码:

baseStr = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  function baseToDec(val){
    n = val.length;
    b = baseStr.length
    s = 0;
    for (i =0; i < val.length; i++){
      n--;
      s = s + (baseStr.indexOf(val[i])*(Math.pow(b,n))); 
        // The non numerical values, such as E or Q could
       // not be multiplied, so we used its index in the baseStr
    }
    return s;
  }

这是jsbin demoan online service这样的对话以批准,以某种方式,该代码工作正常,因为它给出了相同的演示结果。

更新

以下是PHP实现:

<?php
  function baseToDec($val){
    $baseStr = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $n = strlen($val);
    $b = strlen($baseStr);
    $s = 0;
   // var_dump($n);
    for ($i =0; $i < strlen($val); $i++){
      $n--;
      $s = $s + (strpos($baseStr,$val[$i])*($b**$n)); 
        // The non numerical values, such as E or Q could
       // not be multiplied, so we used its index in the $baseStr
    }
    return $s;
  }
  echo baseToDec('A11320');

ideone演示。