Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/240.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何生成5位字母数字顺序字符串_Php_Logic - Fatal编程技术网

Php 如何生成5位字母数字顺序字符串

Php 如何生成5位字母数字顺序字符串,php,logic,Php,Logic,我可以得到5位字母数字顺序字符串的逻辑吗 如果数字在00001-99999之间,我们可以显示相同的数字,但当达到99999时,应该显示A00001,而不是100000。同样,在A9999之后,它应该是B0001 您是否有这样做的逻辑。这应该可以: function gencode($prefix='A',$s = '00000000', $n){ return $prefix.substr($s,0, strlen($s) - strlen($n)).$n; } 如果n是您的(最后一个

我可以得到5位字母数字顺序字符串的逻辑吗

如果数字在00001-99999之间,我们可以显示相同的数字,但当达到99999时,应该显示A00001,而不是100000。同样,在A9999之后,它应该是B0001

您是否有这样做的逻辑。

这应该可以:

function gencode($prefix='A',$s = '00000000', $n){
    return $prefix.substr($s,0, strlen($s) - strlen($n)).$n;
}

如果
n
是您的
(最后一个+1)
项,只需进行一些更改,如验证
$s
上的长度,将
$n
更改为0,并将前缀更改为“B”

我假设您的兴趣是获得一个从0到ZZZZZ的数字序列,您不关心所描述的顺序,实际上,你可以用36为基数

您可以使用PHP自己的方法,该方法允许最多36个数字,如果它达到表示您的值的数字范围,则使用a-z

例如,你应该:

我会把它装在一个干净的盒子里给你:


可能类似这样的操作,将输入字符串转换为基数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%你想要的,而是非常接近。

我想这就是你想要的

$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;
       }
     }

}
$input='10099999';
$i=0;
而($input>=100000)
{
$input=$input-100000;
$i++;
}
如果($i<1)
{
echo$输入;
}
其他的
{
如果($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;
而($i>26)
{
$i=$i-26;
$j++;
}
对于($l=0;$l$i;$l--)
{
如果($input>=(9999/(pow(10,$j)))
$input=$input/10;
}
$kt=$k.“”.$letters[$i].“”.$input;
回音“($k)。”.$letters[$i]。”地板($input/pow(10,$j));
}
其他的
{
$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'];
如果($input==0)
{
回音$字母[$i-1]“0000”;
}
其他的
{
回显$字母[$i-1]。“”.$input;
}
}
}

OP不希望这样,您可以使用sprint()来代替它,从而获得从A到Z的更好结果吗?事实上,在A9999之后不应该是B0000吗?在ZZZZ之后你想要什么?序列必须是这样的吗?或者如果99后面跟9A,那么最大的数字是ZZZZ,但第10001个数字是7pt,你会很好吗?您可能会有相同数量的组合,但顺序准确,而不是您所描述的。@shemeermali请提供我的评论反馈,人们开始发疯了:请正确阅读问题。OP问
我能得到5位字母数字顺序字符串的逻辑吗。
@krishna请正确阅读我的答案。我说他可以使用简单的整数,增加它们,然后使用base_convert来得到他想要的字母数字字符串。我的回答没有错。尽管如此,我还是要为您澄清问题在于,当使用base_convert时,它会更改数字<99999,而您的答案会将
a053
更改为
a054
,哪个OP不需要。如果我正确,OP需要的是从
100000
开始,它应该从
A00001
开始显示,数字应该是5位。@krishna如果他想使用字母数字,那么这是正确的。99不再只是99了。9仍然是9,但10最终大于10,因为9之后不是10而是a。当然,他指出的顺序是不同的,但我很确定,他想要的只是字母数字,他只是不太了解它,因此认为99年后它应该是100,只有99999年后它应该是A0000这是我需要的,但它不能正常工作。有一些错误。你能告诉我是什么错误,以便我可以清除它吗?你能测试“2700000”吗?它给出“ZB0”而不是“AA001”。嗨,奎师那,我在下面贴了一个解决方案作为答案。它几乎可以正常工作。谢谢你的帮助。你太棒了:)
echo do_the_thing('a0000');
99999 -> 9999a
a9999 -> a999a
zzzzz -> 100000
$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;
       }
     }

}
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);      }   }