文字列があり、文字は[a-zA-Z0-9]
です。これは、1文字に26 * 2 + 10 = 62、2に62 * 2の可能性があります。そのような文字列の値を増やして 'aA'が 'aB'になるようにするにはどうすればよいでしょうか? PHPに組み込まれているものはありますか?PHPで英数字の文字列を増やす方法は?
文字列を増やすことができますが、それは小文字だけです。基本的に、結果は 'a'から 'aa'に61ずつ増加する必要があります。
文字列があり、文字は[a-zA-Z0-9]
です。これは、1文字に26 * 2 + 10 = 62、2に62 * 2の可能性があります。そのような文字列の値を増やして 'aA'が 'aB'になるようにするにはどうすればよいでしょうか? PHPに組み込まれているものはありますか?PHPで英数字の文字列を増やす方法は?
文字列を増やすことができますが、それは小文字だけです。基本的に、結果は 'a'から 'aa'に61ずつ増加する必要があります。
@simshaunは私のために仕事をいけません。私はドキュメントをチェックして、あなたのために働くことができるbase_convert(ベース35)と、 "francesco [at] paladinux.net"のコメントがbase65で機能することを発見しました。
ので、解決策をすることができます:B10へ
変換 - >インクリメント+1 - >変換ベース65
EDIT改宗の話を1
私は私が書いたコード化base64ですることだと思いますこの2つの機能は、base64エンコード/デコード番号を使用して機能します。 残念ながら、使用される文字セットは少し大きくなります。[a-zA-Z0-9/+ =]では、内部関数をより効率的に使用しています。
ゼロ 0は "AA ==" である
function nencode($in){
$res ="";
while(1){
$b = $in & 0xff;
$res = chr($b) . $res;
if($in > 0xff){
$in = $in >> 8;
} else {
break;
}
}
return base64_encode($res);
}
function ndecode($in){
$rv=0;
$res =base64_decode($in);
for($t = 0 ; $t < strlen($res) ; $t++){
if($t>0){
$rv = $rv << 8;
}
$c = ord($res{$t});
$rv |= $c;
}
return $rv;
}
は、この機能を試してみてください:
<?php
function increment(&$string){
$last_char=substr($string,-1);
$rest=substr($string, 0, -1);
switch ($last_char) {
case '':
$next= 'a';
break;
case 'z':
$next= 'A';
break;
case 'Z':
$next= '0';
break;
case '9':
increment($rest);
$next= 'a';
break;
default:
$next= ++$last_char;
}
$string=$rest.$next;
}
//sample
$string='a';
for($i=1;$i<=128;$i++){
echo $string."<br>";
increment($string);
}
?>
私は、これは基本的にあなたが後にしている何をしていると思います。
<?php
$chars = array('',
'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',
'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',
'0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$increment1 = 0;
$increment2 = 0;
for ($i = 0; $i <= 200; $i++) {
if ($increment2 === 62) {
$increment1++;
$increment2 = 1;
} else {
$increment2++;
}
echo "{$chars[$increment1]}{$chars[$increment2]} ";
}
/*
Output:
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
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
0 1 2 3 4 5 6 7 8 9 aa ab ac ad ae af ag ah ai aj ak al
am an ao ap aq ar as at au av aw ax ay az aA aB aC aD aE
aF aG aH aI aJ aK aL aM aN aO aP aQ aR aS aT aU aV aW aX
aY aZ a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 ba bb bc bd be bf bg
bh bi bj bk bl bm bn bo bp bq br bs bt bu bv bw bx by bz
bA bB bC bD bE bF bG bH bI bJ bK bL bM bN bO bP bQ bR bS
bT bU bV bW bX bY bZ b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 ca cb
cc cd ce cf cg ch ci cj ck cl cm cn co
*/
私はこの1つが好きです。使い方: ClassX :: increment( 'p04E7K'、6); ClassX :: decrement( 'p04E7K'、6);
コード:
class ClassX {
public static $baseCharacters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
public static function increment($x, $digits)
{
$charList = static::$baseCharacters;
// completa cadeia de caracteres com o numero de digitos parametrizados
$x = trim($x);
if(strlen($x) < $digits) {
$x = str_pad($x, $digits, substr($charList, 0, 1), STR_PAD_LEFT);
}
$result = preg_split("//", $x, -1, PREG_SPLIT_NO_EMPTY);
// percorre a cadeia de caracteres de tras pra frente e incrementa o primeiro caractere possivel
for ($i = $digits - 1; $i >= 0; --$i)
{
$char = $result[$i];
$currentChar = strpos($charList, $char);
$nextCharPosition = $currentChar+1;
if($nextCharPosition < strlen($charList)) {
$nextChar = substr($charList, $nextCharPosition, 1);
$result[$i] = $nextChar;
break;
}
}
return implode('', $result);
}
public static function decrement($x, $digits)
{
$charList = static::$baseCharacters;
// completa cadeia de caracteres com o numero de digitos parametrizados
if(strlen($x) < $digits) {
$x = str_pad($x, $digits, substr($charList, 0, 1), STR_PAD_LEFT);
}
$result = preg_split("//", $x, -1, PREG_SPLIT_NO_EMPTY);
// percorre a cadeia de caracteres de tras pra frente e decrementa o primeiro caractere possivel
for ($i = $digits - 1; $i >= 0; --$i)
{
$char = $result[$i];
$currentChar = strpos($charList, $char);
$previousCharPosition = $currentChar-1;
if($previousCharPosition > -1) {
$previousChar = substr($charList, $previousCharPosition, 1);
$result[$i] = $previousChar;
// define os caracteres apos o decrementado para o ultimo caractere. ex: 3[00] > 2[99]
for ($j = $i + 1; $j < $digits && $i < $digits - 1; ++$j)
$result[$j] = substr($charList, strlen($charList)-1, 1);
break;
}
}
return implode('', $result);
}
}
私はケニアの私たちは、モバイルお金に持っているものと非常によく似た英数字ユニークID(M-PESA)をインクリメント自動生成する方法のためにも探していたように私はこの質問に来ました。自動インクリメント英数字 - - 大文字 のすべての文字 - 文字列の長さの自動増加は、一度排出すなわち は:参考 は、ここでは誰もが同様の特性のためにも探している場合、私はここにそれを残したいと思いScreenshot showing sample MPESA transactions 取引を示すスクリーンショットであります。 - 増分は数の隣接する文字をインクリメントする前に、Zに続い0から9までであり、この問題についての興味深い、@のphobia82の答え
function increment($string){
$last_char=substr($string,-1);
$rest=substr($string, 0, -1);
switch ($last_char) {
case '':
$next= 'A';
break;
case 'Z':
$next = '0';
$unique = increment($rest);
$rest = $unique;
break;
case '9':
$next= 'A';
break;
default:
$next = ++$last_char;
break;
}
$string=$rest.$next;
return $string;
}
1の変形例です。 – Giberno
私はPHPがこれをしたことを知らなかったが、私は今行う。 http://php.net/manual/en/language.operators.increment.php –
希望の進路はありませんか?つまり、「a b c ... x y z A B C ... X Y Z 0 1 2 ... 7 8 9 aa'は明らかにそうではありません。どの文字が最も速く、どの順番で変化するのですか? –