我總是無法確定這是什麼時候生成唯一的數字在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