我总是无法确定这是什么时候生成唯一的数字在PHP中。唯一性:`时间()`Vs`mt_rand()`
是time()
比mt_rand()
更独特吗?
time()
对我来说似乎更独特,因为时间日期不能重复两次。
mt_rand()
我不确定PHP的默认唯一整数提供 - 将一个独特的整数在时间上重复吗?
我总是无法确定这是什么时候生成唯一的数字在PHP中。唯一性:`时间()`Vs`mt_rand()`
是time()
比mt_rand()
更独特吗?
time()
对我来说似乎更独特,因为时间日期不能重复两次。
mt_rand()
我不确定PHP的默认唯一整数提供 - 将一个独特的整数在时间上重复吗?
您考虑过uniqid()
吗?
另外,要回答你的实际问题:mt_rand肯定会最终重复一个数字,不像time()
。但是,如果您希望它是唯一的,则每秒只能使用time()
。
是的,但一个uniqid,如:4b3403665fea6包含字母......我只是想要整数。谢谢。 – laukok
那么,你可以使用'base_convert'如:'base_convert(uniqid(),16,10)'这将使它成为一个唯一的int –
哦,我想补充说的是,整数非常高。如果你使用的是32位系统,你可能希望'substr()'离开'uniqid()'的前2个字节。 –
如果您有很多用户一次性使用time()
,您可能会在同一秒内发生两个事件,从而使time()
不像mt_rand()
那样唯一。使用mt_rand()
,你是几乎保证获得独特的结果,但你可能不会。
另一种解决方案是使用microtime()
返回以微秒为当前时间,这将给你独一无二的邮票,因为这将是不平凡的在同一微秒发生的事件。你也可以很可能使用microtime()
内部使用的时间(考虑uniqid()
从以微秒当前时间(生成一个ID
mt_标识rand可以生成两次相同的值,但您可以考虑这种情况的概率,其中时间返回自unix时期以来的秒数,不能重复两次。但它每秒都会改变,这意味着如果一秒钟内调用超过一次,它将返回相同的结果,其中mt_rand可能会返回不同的值。
这个选择还取决于你想要使用这些数字的目的... – deceze
只需要像'AUTO_INCREMENT'那样使用它,你可以在MySQL中创建一个页面或产品ID。我不能使用'AUTO_INCREMENT'作为ID唯一性,因为我有两个表共享相同的信息。 – laukok
你不能在其中一个表上使用'AUTO_INCREMENT',并使用生成的id作为另一个表吗? 'mysql_insert_id'可以提供帮助。 – poke