首页 > 解决方案 > 在 1 到 100 的范围内生成 3 个唯一的随机数

问题描述

我编写了一个代码,该代码从该范围内生成 3 个随机唯一数字。它似乎有效,但我想知道它是否正常工作,我的代码是否适用于更大的范围。例如,如果我想生成的不是 3 个,而是 300 个从 1 到 10^6 范围内的随机唯一数。我的代码在内存使用和执行时间方面的表现如何?

该代码正在运行,但我不确定。只是想确定一下,我没有遗漏什么。

<?php
    $array=range(1,100);
    $rand = array_rand($array,3);
    echo "Random number 1: ".$array[$rand[0]]."\n";
    echo "Random number 2: ".$array[$rand[1]]."\n";
    echo "Random number 3: ".$array[$rand[2]]."\n";
?>

因此,我想要在性能方面良好的工作代码。

标签: phparraysrandom

解决方案


在这种情况下,递归函数会有所帮助

$r = f(1,1000000,300);

print_r($r);

function f($min, $max, $total, $current=[]){
  if(count($current) == $total){
    return $current;
  }
  $n = rand($min,$max);
  in_array($n, $current) ? '' : ($current[] = $n);
  return f($min, $max, $total, $current);
}

在此处输入图像描述


推荐阅读