PHP随机()函数中的差距

时间:2019-03-19 13:06:44

标签: php random

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

$integer1= rand(1,100);,但我想消除25,60之间的差距。 就像rand((1,25),(60,100)); 当然,PHP不能接受这种表示法。

除了数组以外,还有其他建议吗? -谢谢

3 个答案:

答案 0 :(得分:3)

$integer1 = rand (1, 66); // [1 .. 66]
if ($integer1 > 25) $integer1 += 34; // [1 .. 25, 60 .. 100]

答案 1 :(得分: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)];

答案 2 :(得分: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