就像标题所暗示的那样我需要这样做......
$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'更多的空间我试图保存字符的长度来节省数据库...
答案 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码表:)