Php 增量α数值

Php 增量α数值,php,auto-increment,alphanumeric,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 [cap

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

$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要占用更多的空间“我正在尝试保存要保存在db上的字符长度…

您可以使用每个字母的ascii码。这只是一个简单的例子,将向你展示这个想法,当然,如果你想将“aa1”增加到“aa2”,它需要很多修改,但不可能是什么;你只需要写几个条件

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

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

-ASCII代码表:)

您尝试将其视为基数62:

源代码位于

将其转换为十进制、增量,然后将其转换回基数62

更新

从我阅读代码的方式来看,您可以有如下工作流:

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

如果你想做的就是保存数据库空间,考虑这个问题。

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

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


如果将VARCHAR用于字段类型,较小的数字将占用较少的空间,但对于较大的数字,实际占用的空间更大。对于一个巨大的数字来说,8字节是非常小的。我会省力,只需将DB字段设置为一个
无符号BIGINT

你能提供一个更好的地图来说明你在寻找什么吗?a-b,然后a-Z,然后0-9,然后呢?我知道你有9比1,但我不太明白你的模式。你想实现什么?也许对这个问题有了更好的理解,就可以有一个更简单的解决方案。需要注意的是,9将映射到a,而不是a1。只有在我能够弄清楚在函数属性上输入什么或如何使用它时,它看起来才有希望:)嗯,很好,看起来它在超过第7位之后就不起作用了,我会试试看你能从第6条中得到多少值:)如果它主要用于数据库,我认为AndrewR的答案是正确的。它们不一定是
aa2
,只是希望它每次递增一个……它的相似数字的基数是10位,字母数字的基数是36位。。。如果这在allAs有意义的话,我说过,这个方法需要很多修改和许多编码来处理超过1个字符的$value。8字节*10000条记录加起来就是我的朋友,这是唯一的id,我的客户已经有5k个用户了。仅id一项就让这成为一场噩梦:)如果你只谈论5k-10k id(我假设它们都是连续的)然后使用一个
UNSIGNED SMALLINT
,它只有2个字节,最大值为
65535
。如果超出此范围,只需将数据类型更改为
UNSIGNED MEDIUMINT
,即3个字节,并上升到
16777215
。我知道你的意思,我已经考虑过了,事实是它很复杂,可能是这样的每天可以承载数百万条记录的方法如果要将其用作数据库中的任何类型的外键,您希望它是某种类型的int。此外,当您只有5k个用户时,尝试节省空间听起来有点像预成熟的优化。如果您要以字符串格式(如JSON)发送此数据,则转换后的“值”将始终为您节省空间。否则,int或long在很多情况下可能更好。我的朋友,这是一个周五晚上:)希望我在家或外出,但事实是我们并不总是让我们编辑的网站发挥作用:)我确实使用bigint和alot,以及db opt,因为我每天都在处理大量数据,问题很复杂,高基值可以节省时间:)