生成多个数字时多次重复数字

Repeat numbers multiple times when generating multiple numbers

我正在尝试生成一些数字,但我不希望所有数字都是 unique.I 如果我正在生成从 1100 的数字以重复一个数字n 次。

我想到了这个片段,将 i 变量的值设置为我想要重复的数字,但如果我想重复另一个数字,如 50 等等,它会变得复杂.

for(i = 0; i < 100; i++){
$rand_val =  rand(1,100);
if($i = 12)
$rand_val = 40;
}

是否有随机数生成器 class 允许我生成重复和不重复的数字?

使用数组。
这样您就可以生成随机数并在将它们添加到结果之前检查它们是否已经生成。

$numbers = [];
for($i = 0; $i < 10; $i++)
{
   do { $rand_val =  rand(1,100); } while ( in_array($rand_val, $numbers) );
   $numbers []= $rand_val;    
}
print_r($numbers);

这将为您提供 10 个 唯一 个范围为 1-100 的随机数。

注意:如果你要查找的数字个数大于范围就会挂起。比如,如果您试图在 1-100 范围内找到 200 个唯一的随机数。所以记住这一点。

这确保 $special_value 至少出现 $num_special_occurance 次。如果随机抽取,可能会出现得更多。

$num_numbers = 10;
$special_value = rand(1, 100);
$num_special_occurance = 5;
$numbers = array();
for ($i = 0; $i < $num_numbers - $num_special_occurance; $i += 1) {
    $numbers[] = rand(1, 100);
}
for ($i = 0; $i < $num_special_occurance ; $i += 1) {
    array_splice($numbers, rand(0, count($numbers) - 1), 0, array($special_value));
}

var_dump($numbers);

生成 5 (10-5) 个随机数,然后在随机位置添加特殊值 5 次。