php - 在一个范围内生成唯一的随机数

标签 php

我需要生成一个范围内的随机唯一数字,我该怎么做?我可以通过

生成随机数
generator:
$arr = [];
$x = rand($min, $max);
$len = count($arr);
$flag = 0;
for($i = 0; $i < $len; $i++)
{
 if ($flag === 1)
   goto generator;
 if ($x === $arr[$i])
   $flag = 1;
}
$arr[$index] = $x;
$index++; 
goto generator;

我知道这段代码很糟糕,所以我需要一个更好的优化我的版本的代码! 帮助!

示例: 如果我需要生成 1 到 15 之间的 3 个数字,它们应该是 5、9、1 但不是 3、1、2 [在 1 - 3 中(我想生成的数字)]

最佳答案

随机排列数字范围的数组:

$numbers = range(1, 20);
shuffle($numbers);

包装函数:

function UniqueRandomNumbersWithinRange($min, $max, $quantity) {
    $numbers = range($min, $max);
    shuffle($numbers);
    return array_slice($numbers, 0, $quantity);
}

例子:

<?php
print_r( UniqueRandomNumbersWithinRange(0,25,5) );
?>

结果:

 Array
(
    [0] => 14
    [1] => 16
    [2] => 17
    [3] => 20
    [4] => 1
)

关于php - 在一个范围内生成唯一的随机数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5612656/

相关文章:

php - 你如何将 Rust 中的整数转换为 C 中的 char*

php - 在 Cloud SQL 中使用 LIKE 语句的 PDO 参数化查询

php - mySQL 查询返回具有重复字段的结果?

php - 遇到格式不正确的数值 - 这是什么意思?

php - Windows 上 php 的任务调度

php - 判断一周是奇数还是偶数

php - 搜索用户距离内的项目(地理位置)PHP/MySQL

php - 从 php mysql 传递数据以在同一页面上弹出

php - Codeigniter文件上传类中的多语言错误

php - 在计算 2 个 unix 时间 php 之间的差异后显示小时和分钟