[英]PHP Convert a string primary key to a number representation
我从表中获取了此ID:
“ B0AL02087”
如何将此字母数字id转换为整数数字表示形式? 我期望“ B0AL02087”类似于“ 2011202087”。
我找到了一种使用带有字符串分割符的字母范围来做到这一点的方法,字母中字母的索引切换出键中的字母:
$alphabet = range('A', 'Z');
$arr = str_split("B0AL02087");
$arr[0] = array_search($arr[0], $alphabet);
$arr[2] = array_search($arr[2], $alphabet);
$arr[3] = array_search($arr[3], $alphabet);
implode($arr), '0');
但是该方法仅在您指定$ arr的索引时才有效,这意味着当表中id的格式更改时,该方法不起作用,例如
“ BBAL02087”
现在我们在字符串的开头有两个字母,而不是第一个字母和一个整数。 我可以编写一堆if语句来检查每个索引是否包含数字。 我只是不确定是否有更好的方法可以做到这一点。
不确定要实现的目标,但是使用提供的示例,您可以简单地使用:
str_replace(range('A', 'Z'), range(1, 26), Syour_id)
B0AL02087将返回:2011202087
BBAL02087将返回:2211202087
正如我在先前的评论中所提到的,执行此转换的最终方法是将base转换为base,然后转换为void crash 。
从这篇文章讨论将数字从基数转换为另一个,以及从任何基数转换为十进制基数10的描述,我已经实现了使用javascript的解决方案,该算法将所谓的基数36 即0-9 AZ转换为数字以十进制为基础,可以很容易地将其转换为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演示,并且是一个在线服务 ,通过某种方式进行此类对话以批准该代码,因为该代码可以提供与演示相同的结果。
以下是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演示。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.