我正在遍历一个数组,并为每个记录生成唯一标识符 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/