php怎么不重复随机数

不及物动词 其他 162

回复

共3条回复 我来回复
  • worktile的头像
    worktile
    Worktile官方账号
    评论

    要生成不重复的随机数,可以使用以下方法:

    1. 使用数组来存储已经生成过的随机数。生成一个随机数后,将其存入数组中,下次生成随机数时先检查数组中是否已存在该数,如果存在则重新生成,直到生成一个未出现过的随机数为止。

    “`php
    $randomNumbers = array(); // 存储已生成的随机数

    function generateUniqueRandomNumber() {
    global $randomNumbers;
    $max = 100; // 随机数的最大值
    $min = 1; // 随机数的最小值
    $randomNumber = rand($min, $max); // 生成随机数

    while (in_array($randomNumber, $randomNumbers)) {
    $randomNumber = rand($min, $max); // 再次生成随机数
    }

    $randomNumbers[] = $randomNumber; // 将随机数存入数组

    return $randomNumber;
    }
    “`

    2. 使用洗牌算法。将所有可能的数字放入一个数组中,然后使用洗牌算法打乱数组的顺序,每次需要随机数时取出数组中的一个元素即可。

    “`php
    $numbers = range(1, 100); // 生成包含1-100的数组
    shuffle($numbers); // 打乱数组的顺序

    function generateUniqueRandomNumber() {
    global $numbers;
    $randomNumber = array_pop($numbers); // 从数组中取出一个元素作为随机数

    return $randomNumber;
    }
    “`

    这样就能够生成不重复的随机数了。你可以根据自己的需求选择适合的方法来实现。

    2年前 0条评论
  • fiy的头像
    fiy
    Worktile&PingCode市场小伙伴
    评论

    在PHP中生成不重复的随机数可以使用不同的方法。以下是一些常见的方法:

    1. 使用array_rand()函数:该函数可以从一个数组中随机选取一个或多个键,并返回选取的键。我们可以将要生成随机数的范围以数组的形式传入,然后使用array_rand()函数来选择一个键,并将该键作为随机数返回。为了避免重复,我们可以使用unset()函数将已选取的键从数组中删除。

    “`php
    $numbers = range(1, 10);
    $randomKey = array_rand($numbers);
    $randomNumber = $numbers[$randomKey];
    unset($numbers[$randomKey]);
    “`

    2. 使用shuffle()函数:该函数可以打乱数组中元素的顺序。我们首先使用range()函数创建一个包含所有要生成的随机数的数组,然后使用shuffle()函数打乱数组的顺序。通过每次从数组中取出最后一个元素来生成随机数,并使用array_pop()函数将该元素从数组中移除,以确保不重复。

    “`php
    $numbers = range(1, 10);
    shuffle($numbers);
    $randomNumber = array_pop($numbers);
    “`

    3. 使用mt_rand()函数:该函数可以生成一个指定范围内的随机数。我们先使用range()函数创建一个包含所有要生成的随机数的数组,然后使用shuffle()函数打乱数组的顺序。每次生成一个随机数,使用array_shift()函数将该数从数组中移除,以确保不重复。

    “`php
    $numbers = range(1, 10);
    shuffle($numbers);
    $randomNumber = array_shift($numbers);
    “`

    4. 使用array_diff()函数:该函数可以对比两个数组的差异,并返回两个数组之间的差集。我们可以使用range()函数创建一个包含所有要生成的随机数的数组,然后使用array_diff()函数将已生成的随机数从数组中移除,再从差集中随机取一个数作为随机数。

    “`php
    $numbers = range(1, 10);
    $randomNumbers = array_diff($numbers, $generatedNumbers);
    $randomNumber = array_rand($randomNumbers);
    “`

    5. 使用数据库:将要生成的随机数存储在数据库中的表中,每次生成随机数时,首先查询表中已存在的随机数,然后从剩余的范围中选择一个随机数作为结果。生成随机数后,将该数插入到表中,以确保不重复。

    “`php
    // 假设数据库表名为random_numbers,字段名为number
    // 连接数据库并查询表中已存在的随机数
    mysqli_connect(‘localhost’, ‘username’, ‘password’, ‘database’);
    $query = mysqli_query(“SELECT number FROM random_numbers”);
    $numbers = array();
    while ($row = mysqli_fetch_assoc($query)) {
    $numbers[] = $row[‘number’];
    }

    // 获取剩余范围的随机数
    $randomNumbers = array_diff(range(1, 10), $numbers);
    $randomNumber = array_rand($randomNumbers);

    // 将随机数插入到数据库表中
    mysqli_query(“INSERT INTO random_numbers (number) VALUES ($randomNumber)”);
    “`

    这些方法可以生成不重复的随机数。您可以根据自己的需求选择适合的方法,并根据实际情况进行调整。

    2年前 0条评论
  • 不及物动词的头像
    不及物动词
    这个人很懒,什么都没有留下~
    评论

    在PHP中,可以通过不同的方法来生成不重复的随机数。以下是一种常见的方法:

    1. 生成随机数数组:

    首先,我们可以使用rand()函数来生成一个随机数,并将其存储在一个数组中。然后,我们可以使用in_array()函数来检查新生成的随机数是否已存在于数组中,如果存在,则重新生成一个新的随机数。

    “`php
    $randomNumbers = array();

    while(count($randomNumbers) < $totalNumbers) { $number = rand($min, $max); if (!in_array($number, $randomNumbers)) { $randomNumbers[] = $number; }}```在上述代码中,$totalNumbers表示要生成的随机数的总数,$min和$max表示随机数的范围。2. 使用shuffle()函数:另一种方法是使用shuffle()函数,该函数可以随机打乱数组中的元素顺序。我们可以先创建一个包含连续整数的数组,然后使用shuffle()函数将其打乱,并取前n个元素作为随机数数组。```php$numbers = range($min, $max);shuffle($numbers);$randomNumbers = array_slice($numbers, 0, $totalNumbers);```在上述代码中,$min和$max表示随机数的范围,$totalNumbers表示要生成的随机数的总数。3. 生成不重复的随机数序列:如果需要生成一个连续的不重复的随机数序列,可以使用range()函数生成一个连续整数的数组,然后使用shuffle()函数将其打乱。最后使用array_slice()函数截取需要的个数。```php$numbers = range($min, $max);shuffle($numbers);$randomNumbers = array_slice($numbers, 0, $totalNumbers);```在上述代码中,$min和$max表示随机数的范围,$totalNumbers表示要生成的随机数的总数。通过以上方法,我们可以生成不重复的随机数数组。在实际应用中,可以根据具体需求选择适合的方法。

    2年前 0条评论
注册PingCode 在线客服
站长微信
站长微信
电话联系

400-800-1024

工作日9:30-21:00在线

分享本页
返回顶部