随机()函数的PHP空白[重复]

问题描述 投票:0回答:3

这个问题在这里已有答案:

我想在rand() func中定义差距。在Php中差距就像在数学中一样。例如;

$integer1= rand(1,100);但我希望消除25,60之间的差距。它就像rand((1,25),(60,100));当然这种符号是不被php接受的。

任何建议,除阵列? -谢谢

php random
3个回答
3
投票
$integer1 = rand (1, 66); // [1 .. 66]
if ($integer1 > 25) $integer1 += 34; // [1 .. 25, 60 .. 100]

1
投票

如果你只有一个上限,那么@ Mikhail的回答似乎是最好的选择。如果你可以有多个差距,那么一个变量可能是:

$a = range(1,25);
$b =  range(60, 100); 
// add another ranges if needed
$arr = array_merge($a, $b); // merge all ranges 
echo $arr[array_rand($arr)];

0
投票

那么你可以自己动手,但要注意以下几点。应以相同的概率绘制每个数字。您将需要确定实际绘制的数字范围,其概率与范围的大小成比例,例如:从[1,10],[21,40]得出的数据应该从[21,40]中抽取大约两倍于[1,10]的数字。

这是一般的想法:

确定所有范围的长度。

绘制从0到所有范围长度的随机数

检查数字在哪个范围内。

从它所在的范围内绘制相应的数字。

 function randFromRanges(...$ranges) {
       $totalRangeSize = array_sum(array_map(function ($range) { 
             return $range[1] - $range[0];
       }, $ranges));
       $numberToDraw = rand(0, $totalRangeSize);
       foreach ($ranges as $range) {
            if ($numberToDraw <=  ($range[1] - $range[0])) {
                return $range[0]+$numberToDraw;
            } else {
               $numberToDraw -= ($range[1] - $range[0]);
            }
       }
   }

这是一个沙盒,显示所有值似乎都是等概率的:

http://sandbox.onlinephpfunctions.com/code/b02603e4a9986132073d203c98f8255c2dd62e47

© www.soinside.com 2019 - 2024. All rights reserved.