我正在遍历一个数组,并为每个记录生成唯一标识符 uniqid :

foreach($emailsByCampaign as $campaign => $emails) {
    $campaignHex = $this->strToHex($campaign);
    $values = "(";
    for ($i=0; $i<sizeof($emails);$i++) {
        $values .= $analyticsDbInstance->escape($emails[$i]) . ",'" . uniqid(true) . "'), (";
    }
}

官方文档说明 uniqid 基于微秒生成 id。循环的两个循环将在不到两秒内通过从而导致不唯一的 ID 的可能性有多大?

最佳答案

uniqid() 根据自 Unix 纪元开始 - 1970 年 1 月 1 日以来的微秒数生成一个值。在一台机器上,每个 ID 都是唯一的。两台独立的机器可能(但不太可能)生成相同的 uniqid() 在这种情况下,可以使用前缀和熵参数来避免这种情况。

PHP 中有许多 UUID(或 GUID)的实现,但这些通常会生成 V4 UUID,这些 UUID 不能保证是唯一的(但发生冲突的概率非常小)

如果你需要生成更安全的东西,你可以使用 openssl-random-pseudo-bytes()

关于php - 循环中没有唯一 id 的可能性有多大,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/21430404/

10-12 12:39
查看更多