HP uniqid()函數可用於產生不重複的唯一識別碼,該函數基於微秒級目前時間戳。在高並發或者間隔時間長度極短(如迴圈代碼)的情況下,會出現大量重複資料。即使使用了第二個參數,也會重複,最好的方案是結合md5函數來產生唯一ID。
PHP uniqid() 產生不重複唯一標識方法一
這種方法會產生大量的重複資料,運行如下PHP代碼會數組索引是產生的唯一標識,對應的元素值是該唯一標識重複的次數。 [php] view plain copy <?php $units = array(); for($i=0;$i<1000000;$i++){ $units[] = uniqid(); } $values = array_count_values($units); $duplicates = []; foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; } } echo '<pre>'; print_r($duplicates); echo '</pre>'; ?>
PHP uniqid() 產生不重複唯一標識方法二
這種方法產生的唯一標識重複量明顯減少。
[php] view plain copy <?php $units = array(); for($i=0;$i<1000000;$i++){ $units[] = uniqid('',true); } $values = array_count_values($units); $duplicates = []; foreach($values as $k=>$v){ if($v>1){ $duplicates[$k]=$v; } } echo '<pre>'; print_r($duplicates); echo '</pre>'; ?>
PHP uniqid() 產生不重複唯一標識方法三
這種方法產生的唯一標識中沒有重複。
<?php
$units = array();
for($i=0;$i<1000000;$i++){
$units[]=md5(uniqid(md5(microtime(true)),true));
}
$values = array_count_values($units);
$duplicates = [];
foreach($values as $k=>$v){
if($v>1){
$duplicates[$k]=$v;
}
}
echo '<pre>';
print_r($duplicates);
echo '</pre>';
?>