我想在rand()
函数中定义差距。在PHP
差距就像在数学中一样。
例如;
$integer1= rand(1,100);
,但我想消除25,60之间的差距。
就像rand((1,25),(60,100));
当然,PHP不能接受这种表示法。
除了数组以外,还有其他建议吗? -谢谢
答案 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