鍍金池/ 問答/PHP/ PHP怎么生成唯一的隨機數(shù)?

PHP怎么生成唯一的隨機數(shù)?

PHP怎么生成唯一的隨機數(shù),并添加到數(shù)據(jù)庫。
循環(huán)生成100條隨機數(shù)
再循環(huán)里先在數(shù)據(jù)庫中查詢有沒有改這條數(shù)據(jù),沒有的話則插入,有的話重新生成。

for($i=0; $i<=99; $i++){
    $rand = create_rand_num();//自定義的隨機生成數(shù)字的方法
    $is_have = $model->find($rand);//查找數(shù)據(jù)庫中是否存在
    if(empty($is_have)){//如果不存在
       $model->add($rand);//添加到數(shù)據(jù)庫
    }else{//如果存在
        //這里該怎么寫???
    }
}
回答
編輯回答
練命

1樓代碼測試可以。
補充:
樓主的第一行代碼:for($i=0; $i<=100 $i++),既然是100條,是否$i從1開始,100后不加分號嗎。。
for($i=1; $i<=100;$i++)

2017年4月3日 06:01
編輯回答
陌如玉

guid100個內(nèi)不會重復(fù)

2017年12月6日 03:43
編輯回答
挽歌

一定要數(shù)字么

2017年9月25日 18:38
編輯回答
來守候

你的程序有問題:1.如果有重復(fù)的數(shù)據(jù),你這就沒有100個隨機數(shù)了,雖然你可以else處理,但是麻煩感覺;2.你這就只有一百個數(shù)據(jù),如果一千一萬,你這樣循環(huán)插進去肯定不適合。
所以我的建議是先選好一百個隨機數(shù),然后在一次性插進去。
function getRandNum($begin,$end,$limit,$field){
$rand_array=range($begin,$end);
shuffle($rand_array);//調(diào)用現(xiàn)成的數(shù)組隨機排列函數(shù)
$rand_array=array_slice($rand_array,0,$limit);//截取前$limit個
foreach($rand_array as $key=>$val)
{

$array[][$field]=$val;

}
return $array;
}
$tem_arr = getRandNum(0,99999,100,'id');
$randNum= $model->addAll($tem_arr);//tp批量插入方法
個人愚見,僅供參考

2018年5月31日 23:05
編輯回答
筱饞貓

可以在數(shù)據(jù)庫再進行唯一鍵 插入失敗再進行重新生成插入

2018年4月27日 01:43
編輯回答
執(zhí)念

可以試試黑科技 do-while;

for($i=0; $i<=100 $i++){
    
    do {
        $rand = mt_rand(00000,99999);//隨機生成數(shù)字
        $is_have = $model->find($rand);//查找數(shù)據(jù)庫中是否存在
        if(empty($is_have)){//如果不存在
           $model->add($rand);//添加到數(shù)據(jù)庫
           break;
        }   
    }while(true);
    
}

更推薦你使用第三方包生成唯一id

2017年7月23日 16:20
編輯回答
淺淺

無非是如何跳出循環(huán)的問題,用while可以簡單實現(xiàn):

$c = 0; // 設(shè)一個數(shù)字作計數(shù)器
while(100 > $c) { // 計數(shù)器沒有到100則繼續(xù)執(zhí)行,到了100自動結(jié)束循環(huán)
    $rand = mt_rand(00000, 99999); // 隨機生成數(shù)字
    $is_have = $model->find($rand); // 查找數(shù)據(jù)庫中是否存在
    if(empty($is_have)){ // 如果不存在
        $model->add($rand); // 添加到數(shù)據(jù)庫
        $c++; // 計數(shù)器在插入成功后才累加
    }
}
2018年5月6日 16:22
編輯回答
毀與悔

隨機唯一有很多方法,如果一定要“用數(shù)據(jù)庫中是否存在”這種方法來排重,建議用唯一索引,直接do..while循環(huán),生成并插入成功為止

for($i=0; $i<=100 $i++){

do {
    $rand = mt_rand(00000,99999);//隨機生成數(shù)字
    $re = $model->add($rand);//添加到數(shù)據(jù)庫,已有則$re為false
}while(!$re);

}

2017年7月17日 18:39
編輯回答
情已空
<?php
/**
 * 隨機生成隨機數(shù)
 *
 * @return string 
 */
function generateRandom()
{
    $number = rand(1, 9999); // 按自己規(guī)則隨機生成

    if (rand(0, 9)) { // 數(shù)據(jù)庫驗證,當(dāng)前模擬數(shù)據(jù)庫驗證
        return generateRandom(); // 存在,重新生成
    }

    return $number;
}

/**
 * 生成指定數(shù)量的隨機書
 *
 * @param  integer $num 指定數(shù)量
 * @return array
 */
function generateRandomNum($num = 1)
{
    $result = [];

    while ($num > 0) {
        $result[] = generateRandom();

        $num --;
    }

    return $result;
}

print_r(generateRandomNum(10));
2017年1月2日 07:41
編輯回答
囍槑
else{//如果存在
    $i--;
}
2017年3月16日 22:53