簡體   English   中英

PHP - 使用 random_int() 獲得隨機 integer 而無需重復和循環

[英]PHP - get random integer using random_int() without repeating and looping

我需要在不重復的情況下獲得 50 個超出 1-100 范圍的隨機數。 我目前的做法是:

$array = array();
while (count($array) <= 50) {
  $temp = random_int(1,100);
  if (!in_array($temp, $array))
    $array[] = $temp;
}

但是,循環太多了,因為我需要生成超過 100,000 次。 有沒有其他方法可以在不循環的情況下獲得 50 個隨機非重復數字?

例如:

$number= range(1,100);
$array = array_slice(shuffle($number),0,50);

我不能使用shuffle ,因為它使用偽隨機數。

有沒有其他方法可以實現我的需要,或者可以縮短時間的方法。

預先填寫一組數字並從中挑選,然后將其刪除。 它可以防止您擁有不必要的隨機生成

$numbers = [];
for ($i = 1; $i <= 100; $i++) {
    $numbers[] = $i;
}

$randomNumbers = [];
for ($i = 1; $i <= 50; $i++) {
    $r = rand(0, count($numbers) - 1);
    $randomNumbers[] = $numbers[$r];
    array_splice($numbers, $r, 1);
}

這將是我的方法:

在任何情況下,這都會為您提供 50 個數字,而且它們彼此之間肯定是不同的。 加:你不必預先填充一些其他數組:

$start = microtime(true);
for($i = 0; $i <= 100000; $i++){
$arr = [];
  while(sizeof($arr) < 50){
          $num = rand(1, 100);
          $arr[$num] = $num;
  }

  if(array_unique($arr) !== $arr || sizeof($arr) !== 50 ){
              print("FAIL");
    }
       //print(array_unique($arr) == $arr ? "true" : "false");print("<br>");
       //print(sizeof($arr));print("<br>");
       //print_r(array_count_values ($arr));print("<br>");
       //print_r($arr);print("<br>");

}


$time_elapsed_secs = microtime(true) - $start;
print($time_elapsed_secs);print("<br>");

運行這 100000 次對我來說大約需要 0.4 秒。

實際的生成在這部分完成:

$arr = [];
  while(sizeof($arr) < 50){
          $num = rand(1, 100);
          $arr[$num] = $num;
  }

我們可以分兩步做:

$x = 0;
$arr = [];
while($x < 50){
    $tmp = rand(1, 100);
    if(!in_array($tmp, $arr)){
        $arr[] = $tmp;
        $x++;
    }

}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM