【问题标题】:Unique ID with time()带有 time() 的唯一 ID
【发布时间】:2011-12-13 15:36:05
【问题描述】:

如果我使用:

$t = time();
echo $t;

这将输出类似:1319390934

我有两个问题:

  1. 这个值可以用作唯一ID吗?
  2. 如何从中生成日期?

我不能使用uniqid(),因为我需要一个可用于订购(最近)的值。

【问题讨论】:

  • 在什么情况下独一无二?你是如何使用身份证的? (microtime() 通常也用于唯一 ID)。
  • 在这种情况下是一个不能重复的数字。就像 sql 中的唯一索引。
  • 为什么不使用数据库自​​动增量?
  • 不,我的意思是,您要防止每个用户行或所有用户行之间发生冲突吗?还是其他什么条件? 你需要一个唯一的 ID 吗?
  • 顺便说一下uniqid也是下令的。基本上,它只是一个编码的微时间。

标签: php time uniqueidentifier


【解决方案1】:

我可能会这样做:

$id = microtime();

【讨论】:

    【解决方案2】:

    如前所述,使用time() 将为您提供一种创建唯一ID 的可排序方式。连接字符串还将进一步随机化您想要的结果并仍然保持可排序:

    $uniqueId= time().'-'.mt_rand();
    

    【讨论】:

    • 是的,请确保您在 mt_rand,否则如果两个或多个用户在同一时间出现,他们可能具有相同的唯一 ID。
    【解决方案3】:

    如果您在拥有具有唯一 ID 的用户帐户的环境中使用此代码,则可以将 time() 附加到他们的帐户 ID 以生成唯一 ID。

    您可以使用以下方法将 time() 转换回日期字符串:

    $time = time();
    echo 'The datestamp for (' . $time . ') is ' . date("Y-m-d", $time);
    

    当然可以使用 PHP 的任何 date() 格式更改日期格式。

    【讨论】:

      【解决方案4】:
      1. 显然,这不能用作“唯一”id,因为它在同一秒内不是唯一的。
      2. 查看date

      如果您想要宣传为唯一 id 并且两者都可以排序的东西,您可以使用涉及uniqid的类似内容:

      $u = time().'-'.uniqid(true);
      

      我在这里可能过于简单化了,理所当然地认为time 将产生的所有值将具有相同的位数(因此字符串排序将产生与natural sort 相同的结果)。如果你不想做这个假设,那么你可以考虑

      $u = sprintf("%010s-%s", time(), uniqid(true));
      

      【讨论】:

      • 因为它是用于数据库的,所以 auto_increment 列与 NOW() 列配对也可以工作,具体取决于用途。
      猜你喜欢
      • 2011-10-13
      • 1970-01-01
      • 2020-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多