最新公告
  • 欢迎您光临站长源码网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • php怎么随机数不重复

    正文概述 管理员   2024-08-27   9

    在 PHP 中,可以使用 `mt_rand()` 函数和数组来生成不重复的随机数。

    `mt_rand()` 函数是一个基于 Mersenne Twister 算法的伪随机数生成器,可以用于生成指定范围内的随机整数。

    具体实现步骤如下:

    1. 定义一个空数组 `$nums`,用于存储生成的随机数。

    2. 使用 `mt_rand()` 函数生成一个随机数 `$num`,判断是否已经存在于数组 `$nums` 中,如果不存在,则将该数加入数组中,否则重新生成一个随机数。

    3. 重复步骤 2 直到生成所需个数的随机数。

    示例代码如下:

    ```php

    /**

    * 生成 $count 个不重复的随机数

    *

    * @param int $count 需要生成的随机数个数

    * @param int $min 随机数范围的最小值

    * @param int $max 随机数范围的最大值

    * @return array 生成的随机数数组

    */

    function generateUniqueRandomNumbers($count, $min, $max) {

    $nums = array();

    while (count($nums) < $count) {

    $num = mt_rand($min, $max);

    if (!in_array($num, $nums)) {

    $nums[] = $num;

    }

    }

    return $nums;

    }

    // 生成 5 个在 1 到 50 之间不重复的随机数

    $nums = generateUniqueRandomNumbers(5, 1, 50);

    print_r($nums);

    运行结果类似如下:

    Array

    (

    [0] => 31

    [1] => 24

    [2] => 49

    [3] => 16

    [4] => 6

    )

    这样就可以在 PHP 中生成指定范围内的不重复随机数了。

    在 PHP 中生成随机数可以使用 `rand()` 或者 `mt_rand()` 函数,但是这些函数无 法确保生成的随机数不重复。如果你需要生成一些不重复的随机数,可以使用以下两种方法:

    1. Fisher-Yates 算法

    Fisher-Yates 算法是一种随机置换算法,可以用于将一个数组随机排序。我们可以使用这个算法生成一组不重复的随机数。具体实现方法如下:

    ```php

    function fisher_yates_shuffle($arr) {

    $count = count($arr);

    for($i = $count - 1; $i > 0; $i--) {

    $j = mt_rand(0, $i);

    $tmp = $arr[$i];

    $arr[$i] = $arr[$j];

    $arr[$j] = $tmp;

    }

    return $arr;

    }

    // 生成一组不重复的随机数

    $arr = range(1, 10);

    $shuffle_arr = fisher_yates_shuffle($arr);

    在这个函数中,我们首先生成一个包含从 1 到 10 的整数的数组,然后使用 Fisher-Yates 算法将数组随机排序,最后返回这个随机排序后的数组。

    2. 洗牌算法

    洗牌算法是一种生成不重复随机数的高效算法。它的基本思想是:生成一组序列,然后将这些序列随机交换位置,最后取出前面的若干个数作为不重复随机数。具体实现如下:

    ```php

    function shuffle_array($arr, $num) {

    $count = count($arr);

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

    $j = mt_rand(0, $count - 1);

    $tmp = $arr[$i];

    $arr[$i] = $arr[$j];

    $arr[$j] = $tmp;

    }

    return array_slice($arr, 0, $num);

    }

    // 生成一组不重复的随机数

    $arr = range(1, 10);

    $shuffle_arr = shuffle_array($arr, 5);

    在这个函数中,我们首先生成一个包含从 1 到 10 的整数的数组,然后使用洗牌算法将数组随机打乱,最后取出前面的 5 个数作为不重复随机数。

    无论是用 Fisher-Yates 算法还是洗牌算法,都可以生成一组不重复的随机数,但是如果需要生成的随机数比较多,或者需要在每次运行程序时生成不同的随机数,这些算法可能效率比较低。如果你需要高效地生成大量不重复的随机数,可以考虑使用哈希算法或者 bloom filter 算法。


    站长源码网 » php怎么随机数不重复

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    支付宝支付
    余额支付
    ×
    微信扫码支付 0 元