4 Stimmen

alphanumerische Werte inkrementieren

Wie der Titel andeutet, muss ich etwas wie folgt tun...

$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

und so weiter... UPDATE

Nun, sagen wir, ich verwende numerische Werte $id++; Ich würde mit einer großen Zahl enden 1310743942525 ; die viel mehr Platz als sagen kann `ab34c9" im versuchen, Länge der Zeichen auf db speichern ...

3voto

H Hatfield Punkte 881

Man versucht, sie als eine Zahl zur Basis 62 zu behandeln:
http://www.pgregg.com/projects/php/base_conversion/base_conversion.php

mit Quellcode unter

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

in Dezimalzahlen umwandeln, inkrementieren und zurück zur Basis 62 konvertieren

UPDATE

So wie ich den Code lese, könnten Sie einen Arbeitsablauf wie diesen haben:

$value = 'ab8Zb';
$value_base10 = base_base2dec($value, 62);
$value_base10++;
$value = base_dec2base($value_base10, 62); // should be 'ab8Zc'

2voto

AndrewR Punkte 6490

Wenn Sie lediglich versuchen, Speicherplatz in der Datenbank zu sparen, sollten Sie Folgendes bedenken.

In MySQL können Sie ein Feld mit einem Typ UNSIGNED BIGINT . Die maximale Größe dieses Feldes beträgt 18446744073709551615 und der Speicherplatz beträgt nur 8 Byte.

Würde man diese Zahl (1,844 x 10^19) zur Basis-62 umrechnen, würde sie wie folgt dargestellt werden LygHa16AHYF . Sie benötigen eine CHAR(11) (11 Bytes) oder ein VARCHAR(11) (12 Bytes), um die umgewandelte Zahl zu speichern.

Wenn Sie VARCHAR für den Feldtyp verwenden würden, würden kleinere Zahlen weniger Platz benötigen, aber für größere Zahlen wird mehr Platz benötigt. 8 Bytes für eine große Zahl sind ohnehin ziemlich wenig. Ich würde mir die Mühe sparen und das DB-Feld einfach zu einem UNSIGNED BIGINT .

0voto

Sie können für jeden Buchstaben einen Ascii-Code verwenden. Dies ist nur ein einfaches Beispiel, das Ihnen die Idee zeigt, natürlich braucht es eine Menge Modifikationen, wenn Sie 'aa1' in 'aa2' inkrementieren wollen, aber unmöglich ist es nicht ;P Sie müssen nur einige Bedingungen schreiben.

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

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

http://www.asciitable.com/ - ASCII-Code-Tabelle :)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X