如何在php中取随机数不重复

如何在php中取随机数不重复?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

创新互联公司网站建设公司,提供成都网站设计、做网站,网页设计,建网站,PHP网站建设等专业做网站服务;可快速的进行网站开发网页制作和功能扩展;专业做搜索引擎喜爱的网站,是专业的做网站团队,希望更多企业前来合作!

php取随机数不重复的方法:1、使用【rand(min,max)】函数产生随机数;2、使用【array_unique(arr)】对生成的数组进行去重;3、利用索引快速的生成不重复的随机数。

php取随机数不重复的方法:

首先想到的是rand(min,max)函数产生随机数,实际上使用mt_rand(min,max)能更加迅速的产生随机数。

其次使用array_unique(arr)对生成的数组进行去重,实际上使用array_flip(array_flip(arr))能更加快速的进行去重。

了解以上两点我们便可以写一个稍微优化过的函数:

/**
 * 生成指定长度不重复的字符串.
 *
 * @param integer $min 最小值.
 * @param integer $max 最大值.
 * @param integer $len 生成数组长度.
 *
 * @return array
 */
function uniqueRandom($min, $max, $len)
{
    if ($min < 0 || $max < 0 || $len) {
        throw new LogicException('无效的参数');
    }
    if ($max <= $min) {
        throw new LogicException('大小传入错误');
    }
    $counter = 0;
    $result = array();
    while ($counter < $len) {
        $result[] = mt_rand($min, $max);
        $result = array_flip(array_flip($result));
        $counter = count($result);
    }
    shuffle($result);
    return $result;
}

其实可以利用索引来更加快速的生成不重复的随机数,且效率甩上面函数几条街。

/**
 * 生成指定长度不重复的字符串.
 *
 * @param integer $min 最小值.
 * @param integer $max 最大值.
 * @param integer $len 生成数组长度.
 *
 * @return array
 */
function uniqueRandom2($min, $max, $len)
{
    if ($min < 0 || $max < 0 || $len < 0) {
        throw new LogicException('无效的参数');
    }
    if ($max <= $min) {
        throw new LogicException('大小传入错误');
    }
    if (($max - $min + 2) < $len) {
        throw new LogicException("传入的范围不足以生成{$len}个不重复的随机数}");
    }
    $index = array();
    for ($i = $min; $i < $max + 1; $i++) {
        $index[$i] = $i;
    }
    $startOne = current($index);
    $endOne = end($index);
    for ($i = $startOne; $i < $endOne; $i++) {
        $one = mt_rand($i, $max);
        if ($index[$i] == $i) {
            $index[$i] = $index[$one];
            $index[$one] = $i;
        }
    }
    return array_slice($index, 0, $len);
}

该算法与上面算法相比巧妙之处在于:

  • 对自增索引进行随机,不会有重复的问题,避免了去重的开销

  • 用数组下标替代数组本身进行随机,每取到一个随机数后就将其在取值范围中排除,下一次仅会在剩下的数字中取,一次遍历就可以完成随机数的选取。

看完上述内容,你们掌握如何在php中取随机数不重复的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!

网站名称:如何在php中取随机数不重复
本文链接:https://www.cdcxhl.com/article34/ipdgse.html

成都网站建设公司_创新互联,为您提供品牌网站制作商城网站电子商务网站设计公司做网站网站收录

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

微信小程序开发