我遇到了一个问题,当我尝试用mt_rand或rand(在更大的范围内)随机生成数字时,我根本没有得到任何结果。这曾经在我的服务器上运行良好,但现在似乎出现了问题,我不确定为什么。
<?php
echo 'Your number is: '.rand(0, 99999999999999999999);
?>
在哪里,我将其更新为类似(使用9位数字):
<?php
echo 'Your number is: '.rand(0, 999999999);
?>
下面的例子会很好用。我最近更改了我的服务器版本PHP 7.0。有没有办法增加最大数量或更好的方法?谢谢
在32位和64位系统上,数字99999999999999999999
太大,无法在PHP7中表示为整数,因此它变为浮点值。
但是,mt_rand()
取两个整数。因为99999999999999999999
太大,不能是整数,所以当您将其传递给函数时,PHP7会抛出一个错误,因为它无法安全地转换。999999999
没有出现此错误,因为它足够小,可以是一个整数。
无论如何,您当前的代码在PHP5下可能没有达到您想要的效果:在64位系统上,99999999999999999999
被静默地转换为7766279631452241920
,在32位系统上则被转换为其他代码。所以你没有得到所有的随机数。你写了rand(0, 99999999999999999999)
,但实际上你得到了rand(0, 7766279631452241920)
。
如果你只想要一个尽可能宽的随机数,试试这个:
<?php
echo 'Your number is: '.rand(0, PHP_INT_MAX);
?>
PHP_INT_MAX
是一个包含最大可能整数的常数(根据您使用的是32位还是64位,整数会有所不同)。因此,这样做总是会从该函数中得到尽可能广泛的随机正数。
要在php7中运行代码,必须键入
<?php
echo 'Your number is: '.rand(0,(int) 99999999999999999999);
?>
Microtime每次都随机生成。
function microtimeRand( $min, $max ) {
$microtimeInt = intval( microtime( true ) * 100 );
$microtimeInt = $microtimeInt % ($max - $min);
$microtimeInt += $min;
return $microtimeInt;
}