在 PHP 中获得随机布尔真/假的最优雅的方法是什么?
我能想到:
$value = (bool)rand(0,1);
但是将整数转换为布尔值会带来任何缺点吗?
或者这是一种“官方”的方式来做到这一点?
如果您不希望进行布尔转换(并不是说这有什么问题),您可以轻松地将其设置为像这样的布尔值:
$value = rand(0,1) == 1;
基本上,如果随机值为 ,则为1
,true
否则为false
。当然,一个0
或1
已经作为一个布尔值的值;所以这:
if (rand(0, 1)) { ... }
是一个完全有效的条件,将按预期工作。
或者,您可以使用mt_rand()
随机数生成(这是对 的改进rand()
)。您甚至可以openssl_random_pseudo_bytes()
使用以下代码:
$value = ord(openssl_random_pseudo_bytes(1)) >= 0x80;
在 PHP 7.0 中,您将能够使用random_int()
生成密码安全的伪随机整数:
$value = (bool)random_int(0, 1);
我用一个简单的
rand(0,1) < 0.5
只是为了完整起见,如果您想在某种if
条件下使用它,则无需强制转换,因为0
被认为是false
:
if (mt_rand(0,1)) {
// whatever
}
注意:mt_rand
比 4x 快rand
该
mt_rand()
功能是旧的rand()
. 它使用具有已知特性的随机数生成器,使用“Mersenne Twister”,生成随机数的速度比一般 libc提供的快四倍。rand()
php stan 推荐
1 === random_int(0, 1)