4

タイトルが示すように、私はそのようなことをする必要があります...

$i++;//we all know this.

$value = 'a';

increment($value);// i need this functionality
//output 
string [ b ]

///here are some more samples, to help you understand...

increment('b'); //output// c
increment('z'); //output// A [capital A not fussy but would be good :) ]
increment('9'); //output// a1
increment('a1'); //output// a2
increment('aa1'); //output// aa2

など... 更新

数値 $id++; を使用するとしましょう。最終的には膨大な数になり1310743942525ます。「ab34c9」と言うよりも多くのスペースを必要とする可能性があります。データベースに保存するために文字の長さを保存しようとしています...

4

3 に答える 3

3

あなたはそれを基数62の数字として扱わせようとします:
http ://www.pgregg.com/projects/php/base_conversion/base_conversion.php

ソースコード付き

http://www.pgregg.com/projects/php/base_conversion/base_conversion.inc.phps

10進数に変換し、インクリメントして、62進数に戻します。

アップデート

私がコードを読んだ方法から、あなたはこのようなワークフローを持つことができます:

$value = 'ab8Zb';
$value_base10 = base_base2dec($value, 62);
$value_base10++;
$value = base_dec2base($value_base10, 62); // should be 'ab8Zc'
于 2011-07-15T15:34:08.900 に答える
2

データベース領域を節約することだけを目的としている場合は、これを考慮してください。

MySQL では、 type のフィールドを持つことができますUNSIGNED BIGINT。このフィールドの最大サイズは 18446744073709551615 で、ストレージ スペースはわずか 8 バイトです。

この数値 (1.844 x 10^19) を base-62 に変換すると、 のように表されLygHa16AHYFます。変換された数値を格納するには、 CHAR(11)(11 バイト) または(12 バイト)が必要です。VARCHAR(11)

フィールド タイプに VARCHAR を使用した場合、数値が小さいほど必要なスペースは少なくなりますが、数値が大きいほど、実際にはより多くのスペースが必要になります。とにかく、巨大な数の8バイトはかなり最小限です。手間を省いて、DB フィールドをUNSIGNED BIGINT.

于 2011-07-15T15:55:29.213 に答える
0

各文字のASCIIコードを使用できます。これはアイデアを示す簡単な例です。もちろん、「aa1」を「aa2」にインクリメントする場合は多くの変更が必要ですが、不可能なことはありません;Pいくつかの条件を記述するだけで済みます。

function increment($value) 
{
  if(strlen($value)>1)
    return false; 

  $asciiCode = ord($value); 
  return chr($asciiCode + 1); 
}

http://www.asciitable.com/-ASCIIコードテーブル:)

于 2011-07-15T15:29:02.993 に答える