我从表中获取此ID:
" B0AL02087"
如何将此字母数字ID转换为intergre数字表示?我期待" B0AL02087"类似于" 2011202087"。
我找到了一种方法,使用字符串范围和字符串拆分,字母表中的字母索引会切换键中的字母:
Country
但是这种方法只有在指定$ arr的索引时才有效,这意味着当表格中的id格式发生变化时,它不起作用,例如:
" BBAL02087"
现在我们在字符串的开头有两个字母而不是字母和第一个字符串。我可以编写一堆if语句来检查每个索引是否包含一个数字。我只是不确定是否有更好的方法来做到这一点。
答案 0 :(得分:4)
不确定您要实现的目标,但使用您提供的示例,您只需使用:
str_replace(range('A', 'Z'), range(1, 26), Syour_id)
B0AL02087将返回:2011202087
BBAL02087将返回:2211202087
答案 1 :(得分:0)
正如我在之前的评论中所考虑的那样,执行此转换的最终方式是从基础转换为基础,转换为无效碰撞。
从this article谈论将数字从基数转换为另一个,以及从任何基数转换为十进制基数10的描述。我已经使用javascript实现了解决方案的解决方案基数36,即0-9 A-Z ,数字到十进制10,可以很容易地转换为php代码:
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 demo和an 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演示。