增加alpha数值

时间:2011-07-15 15:21:17

标签: php auto-increment alphanumeric

就像标题所暗示的那样我需要这样做......

$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'更多的空间我试图保存字符的长度来节省数据库...

3 个答案:

答案 0 :(得分: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

将其转换为十进制,递增,并将其转换回base 62

更新

从我阅读代码的方式来看,你可以拥有这样的工作流程:

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

答案 1 :(得分:2)

如果您要做的只是保存数据库空间,请考虑这一点。

在MySQL中,您可以拥有类型为UNSIGNED BIGINT的字段。该字段的最大大小为18446744073709551615,存储空间仅为8个字节。

如果您要将此数字(1.844 x 10 ^ 19)转换为base-62,则表示为LygHa16AHYF。您需要CHAR(11)(11个字节)或VARCHAR(11)(12个字节)才能存储转换后的数字。

如果您使用VARCHAR作为字段类型,较小的数字将占用较少的空间,但对于较大的数字,它实际上需要更多。无论如何,大数字的8个字节非常小。我会节省工作量,只需将数据库字段设为UNSIGNED BIGINT

答案 2 :(得分: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码表:)