PHP怎么生成唯一的随机数?

PHP怎么生成唯一的随机数,并添加到数据库。
循环生成100条随机数
再循环里先在数据库中查询有没有改这条数据,没有的话则插入,有的话重新生成。

for($i=0; $i<=99; $i++){
    $rand = create_rand_num();//自定义的随机生成数字的方法
    $is_have = $model->find($rand);//查找数据库中是否存在
    if(empty($is_have)){//如果不存在
       $model->add($rand);//添加到数据库
    }else{//如果存在
        //这里该怎么写???
    }
}
阅读 8.3k
11 个回答
else{//如果存在
    $i--;
}

可以试试黑科技 do-while;

for($i=0; $i<=100 $i++){
    
    do {
        $rand = mt_rand(00000,99999);//随机生成数字
        $is_have = $model->find($rand);//查找数据库中是否存在
        if(empty($is_have)){//如果不存在
           $model->add($rand);//添加到数据库
           break;
        }   
    }while(true);
    
}

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

可以在数据库再进行唯一键 插入失败再进行重新生成插入

随机唯一有很多方法,如果一定要“用数据库中是否存在”这种方法来排重,建议用唯一索引,直接do..while循环,生成并插入成功为止

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

do {
    $rand = mt_rand(00000,99999);//随机生成数字
    $re = $model->add($rand);//添加到数据库,已有则$re为false
}while(!$re);

}

无非是如何跳出循环的问题,用while可以简单实现:

$c = 0; // 设一个数字作计数器
while(100 > $c) { // 计数器没有到100则继续执行,到了100自动结束循环
    $rand = mt_rand(00000, 99999); // 随机生成数字
    $is_have = $model->find($rand); // 查找数据库中是否存在
    if(empty($is_have)){ // 如果不存在
        $model->add($rand); // 添加到数据库
        $c++; // 计数器在插入成功后才累加
    }
}

1楼代码测试可以。
补充:
楼主的第一行代码:for($i=0; $i<=100 $i++),既然是100条,是否$i从1开始,100后不加分号吗。。
for($i=1; $i<=100;$i++)

你的程序有问题:1.如果有重复的数据,你这就没有100个随机数了,虽然你可以else处理,但是麻烦感觉;2.你这就只有一百个数据,如果一千一万,你这样循环插进去肯定不适合。
所以我的建议是先选好一百个随机数,然后在一次性插进去。
function getRandNum($begin,$end,$limit,$field){
$rand_array=range($begin,$end);
shuffle($rand_array);//调用现成的数组随机排列函数
$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批量插入方法
个人愚见,仅供参考

guid100个内不会重复

一定要数字么

for($i=0; $i<=100 $i++){
    
    do {
        $rand = mt_rand(00000,99999);//随机生成数字
        $is_have = $model->find($rand);//查找数据库中是否存在
        if(empty($is_have)){//如果不存在
           $model->add($rand);//添加到数据库
           break;
        }   
    }while(true);
    
}
<?php
/**
 * 随机生成随机数
 *
 * @return string 
 */
function generateRandom()
{
    $number = rand(1, 9999); // 按自己规则随机生成

    if (rand(0, 9)) { // 数据库验证,当前模拟数据库验证
        return generateRandom(); // 存在,重新生成
    }

    return $number;
}

/**
 * 生成指定数量的随机书
 *
 * @param  integer $num 指定数量
 * @return array
 */
function generateRandomNum($num = 1)
{
    $result = [];

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

        $num --;
    }

    return $result;
}

print_r(generateRandomNum(10));
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题