我可以获得逻辑来制作5位数字数字连续字符串。
如果数字在00001-99999之间,我们可以显示相同的数字,但是当达到99999时,它应该显示A00001而不是100000.同样在A9999之后它应该是B0001。
你有任何逻辑吗?
答案 0 :(得分:2)
也许像这样将输入字符串转换为基数10([0-9]),将值增加1,转换回基数36([a-z0-9])并返回新值。对于小于10000的数值,它还将值填充为5个字符。
function do_the_thing($string){
return str_pad(base_convert(base_convert($string,36,10)+1,10,36),5,0,STR_PAD_LEFT);
}
使用
进行测试echo do_the_thing('a0000');
返回'a0001'。
测试后的一些结果:
99999 -> 9999a
a9999 -> a999a
zzzzz -> 100000
不是100%你正在寻找但非常接近。
答案 1 :(得分:1)
我认为这就是你所要求的
$input = '10099999';
$i=0;
while($input >= 100000)
{
$input = $input - 100000;
$i++;
}
if($i < 1)
{
echo $input;
}
else
{
if($i >26)
{
$letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
$k="";
$j=0;
while($i > 26)
{
$i=$i-26;
$j++;
}
for($l=0;$l<$j;$l++)
{
$k=$k."".$letters[25];
}
if($input == 0)
$input = "0000";
$input2="";
for($l=$i;$l>$i;$l--)
{
if($input >= (9999/(pow(10,$j))))
$input = $input / 10;
}
$kt=$k."".$letters[$i]."".$input;
echo "".($k)."".$letters[$i]."".floor($input/pow(10,$j));
}
else
{
$s="";
$letters = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z'];
if($input == 0)
{
echo $letters[$i-1]."0000";
}
else
{
echo $letters[$i-1]."".$input;
}
}
}
答案 2 :(得分:0)
我假设你的兴趣是得到一系列的数字,从0到ZZZZZ并且你不关心所描述的顺序,你实际上可以使用36来作为你的数字。
您可以使用PHP自己的base_convert方法,该方法允许base最多36个,并且如果它达到数字范围以表示您的值,则使用a-z。
例如,做this:
<?php
$number = '12332';
echo base_convert($number, 10, 36);
这会将9ik
作为值。
你可以使用简单的整数并增加它们,然后使用base_convert获得你想要的序列号。
所以就这样做:
$input = 'a053'; // your alphanumeric input number
$base10 = intval(base_convert($input, 36, 10)); // converted to base10
$base10++; // increase number
$output = base_convert($base10, 10, 36); // convert back to alphanumerical
我会为你整理function:
<?php
/**
* increases given base36 number $current and returns it as base 36
*/
function giveMyNumber($current = 0) {
$base36 = '00000';
if($current > 0) {
$base10 = base_convert($current, 36, 10);
$base10++;
if($base > 60466175) {
throw new \Exception('Maximum reached!');
}
$base36 = base_convert($base10, 10, 36);
}
return $base36;
}
echo giveMyNumber('45Z');
答案 3 :(得分:-1)
function seq4($input){
$i=0;$var = 'A';
$max_lenght = 5; $length = strlen($input);
if($length>$max_lenght){ while($input >= 10000){
$input = $input - 10000;
$i++; }
$i=$i-9;
while($i > 1){
$i--;
$var++.'';
}
$bal_lenght = $max_lenght - ($str_lenght = strlen($var));
$string = $var.str_pad($input, $bal_lenght, "0", STR_PAD_LEFT);
$string_lenght = strlen($string);
return ($string_lenght>$max_lenght)?false:$string; } else {
return str_pad($input, 5, "0", STR_PAD_LEFT); } }
答案 4 :(得分:-2)
这应该有效:
function gencode($prefix='A',$s = '00000000', $n){
return $prefix.substr($s,0, strlen($s) - strlen($n)).$n;
}
如果n
是您的(last +1)
项,只需要进行一些更改,例如验证$s
上的长度,将$n
更改为0,并将前缀改为&#39; B&# 39;