在PHP中获取随机布尔值true / false的最优雅方法是什么?
我能想到:
$value = (bool)rand(0,1);
但是将整数转换为布尔值会带来任何缺点吗?
或者这是一个"官员"这样做的方法?
答案 0 :(得分:89)
如果你不希望有一个布尔强制转换(不是说它有什么问题)你可以很容易地把它变成这样的布尔值:
$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);
答案 1 :(得分:5)
我使用简单的
rand(0,1) < 0.5
答案 2 :(得分:1)
出于完整性考虑,如果您想在if
条件下使用它,则无需强制转换,因为0
被认为是false
:
if (mt_rand(0,1)) {
// whatever
}
注意:mt_rand
比rand
快4倍
mt_rand()
函数可以替代较旧的rand()
。它使用具有“ Mersenne Twister”特征的已知随机数生成器,该生成器生成随机数的速度将比rand()
所提供的平均libc快四倍。
答案 3 :(得分:0)
建议使用php
1 === random_int(0, 1)
答案 4 :(得分:0)
从技术上讲,其性能不如其他答案-但您也可以使用类型强制:
if(!!rand(0, 1)) {
// random
}