在 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;
random_int()
,它生成加密安全的伪随机整数:
$value = (bool)random_int(0, 1);
我用的是简单的
rand(0,1) < 0.5
为了完整起见,如果您想在
if
条件下使用它,则无需进行强制转换,因为 0
被视为 false
并且 mt_rand
会生成以下范围内的随机整数:
if (mt_rand(0,1)) { // 0 = false, 1 = true
// whatever
}
注意:
mt_rand
比 rand
快 4 倍
功能是旧版mt_rand()
的直接替代品。它使用具有已知特征的随机数生成器,使用“Mersenne Twister”,它生成随机数的速度比一般 libcrand()
rand()
提供的速度快四倍。 (来源:https://www.php.net/manual/en/function.mt-rand.php)
1 === random_int(0, 1)
true
/
false
值,可以使用 mt_rand()
函数,如下所示:$randBool = (bool) mt_rand(0, 1);
值得注意的是之前的回复中未
涵盖的一些额外要点,这在某些情况下可能很有价值:
从 PHP 7.1+ 开始,rand()
mt_rand()
的别名。虽然 mt_rand()
考虑替代方案(因为
mt_rand()
的结果是可以预测的)。