在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);
===
)而不是强制转换(==
)呢? - NerdOfCoderand(0, 1)
总是返回一个整数值,因此您不需要严格的类型安全比较;如果函数返回其他类型的值(例如false
或null
),则情况将有所不同,这些值将被强制转换为0
。 - Ja͢ckrand(0,1) < 0.5
rand(0, 1) < 0.25
。 - neaverand(0, 100) < 25
修改为有效 @neave。 - aland为了完整性,如果你想在if
条件语句中使用它,无需进行强制类型转换,因为0
被视为false
,而mt_rand
生成的随机整数范围如下:
if (mt_rand(0,1)) { // 0 = false, 1 = true
// whatever
}
mt_rand
比rand
快4倍
mt_rand()
函数是旧的rand()
函数的即插即用替代品。它使用一个具有已知特性的随机数生成器,使用“梅森旋转器”,将生成随机数的速度提高了四倍,而这比平均libc库中的rand()
提供的速度更快。 (来源:https://www.php.net/manual/zh/function.mt-rand.php)
推荐使用 PHP Stan
1 === random_int(0, 1)
random_int()
比rand()
更耗费资源。关于这个问题可以参考https://dev59.com/vVcP5IYBdhLWcg3wi6gA - phaberest
mt_rand()
比rand()
更好,查看这个答案。 - HamZarand(0,1) == 1
或rand(0,1) > 0
。虽然隐式转换已经有文档说明,但在我看来它有点难以阅读。 - Caramirielarray_rand(array(True, False))
。 - Amal Murali