77

在 PHP 中获得随机布尔真/假的最优雅的方法是什么?

我能想到:

$value = (bool)rand(0,1);

但是将整数转换为布尔值会带来任何缺点吗?

或者这是一种“官方”的方式来做到这一点?

4

4 回答 4

147

如果您不希望进行布尔转换(并不是说这有什么问题),您可以轻松地将其设置为像这样的布尔值:

$value = rand(0,1) == 1;

基本上,如果随机值为 ,则为1true否则为false。当然,一个01已经作为一个布尔值的值;所以这:

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);
于 2013-10-07T10:51:34.833 回答
9

我用一个简单的

rand(0,1) < 0.5
于 2017-08-19T08:54:54.413 回答
4

只是为了完整起见,如果您想在某种if条件下使用它,则无需强制转换,因为0被认为是false

if (mt_rand(0,1)) {
  // whatever
}

注意:mt_rand比 4x 快rand

mt_rand()功能是旧的rand(). 它使用具有已知特性的随机数生成器,使用“Mersenne Twister”,生成随机数的速度比一般 libc提供的快四倍。rand()

于 2020-05-12T01:02:03.703 回答
0

php stan 推荐

1 === random_int(0, 1)
于 2020-05-13T11:38:24.037 回答