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

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

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

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

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

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

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

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

一定要數(shù)字么

2017年9月25日 18:38
編輯回答
來(lái)守候

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

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

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

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

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

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

可以試試黑科技 do-while;

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

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

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

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

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

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

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

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

}

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

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

    return $number;
}

/**
 * 生成指定數(shù)量的隨機(jī)書(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