我需要获得基于时间的唯一 ID,它只包含数字,我想简单地使用这样的东西:
str_replace(".", "", microtime(true))
Run Code Online (Sandbox Code Playgroud)
我会将这个id用于很多事情,例如评论发布,我期待相当高的流量,所以我想知道与microtime功能发生冲突的可能性有多高?
也许有更好的方法来获得数字唯一ID?请记住,它必须基于时间,因此可以进行排序.
Ami*_*kef 12
你可以使用它来获得uniqid但不是数字:
$id = uniqid(); //58aea16085f6b
Run Code Online (Sandbox Code Playgroud)
使用它将其转换为仅数字:
$id = hexdec( uniqid() ); //1560112880181100
Run Code Online (Sandbox Code Playgroud)
如果它太长时间使用这个但可能得到一些数字:
$id = crc32( uniqid() ); //-1551585806
Run Code Online (Sandbox Code Playgroud)
如果你只是需要姿势数字,你可以这样做:
$id = abs( crc32( uniqid() ) ); //1551585806
Run Code Online (Sandbox Code Playgroud)
如果必须基于时间,则可以使用微时间。但我猜你存储的东西在数据库中,所以我投票将去一个primary key列Id有auto_increment脚,然后第二列timestamp类型和默认current time。
然后,您可以按时间戳排序,即使流量非常高,也具有100%的唯一标识符。但是,如果需要排序(这样就不必在日期之间搜索),那么您就不需要基于时间了。
1、2、3、4的顺序与微秒键的顺序相同,只是更大而且更进一步。
更新
如果它必须是唯一键并且不能从数据库中使用,请尝试以下操作。重复密钥的更改很小,可以忽略。
$key = microtime() + floor(rand()*10000);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
15263 次 |
| 最近记录: |