在 PHP 中获取随机布尔值 true/false

问题描述 投票:0回答:5

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

我能想到:

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

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

或者这是一种“官方”方式吗?

php random boolean
5个回答
164
投票

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

$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);

8
投票

我用的是简单的

rand(0,1) < 0.5

8
投票

为了完整起见,如果您想在

if
条件下使用它,则无需进行强制转换,因为
0
被视为
false
并且
mt_rand
会生成以下范围内的随机整数:

if (mt_rand(0,1)) { // 0 = false, 1 = true
  // whatever
}

注意:

mt_rand
rand

快 4 倍

mt_rand()
功能是旧版
rand()
的直接替代品。它使用具有已知特征的随机数生成器,使用“Mersenne Twister”,它生成随机数的速度比一般 libc rand() 提供的速度快四倍。 (来源:
https://www.php.net/manual/en/function.mt-rand.php


1
投票

1 === random_int(0, 1)



0
投票
true

/

false
值,可以使用
mt_rand()
函数,如下所示:
$randBool = (bool) mt_rand(0, 1);

值得注意的是之前的回复中

涵盖的一些额外要点,这在某些情况下可能很有价值:

从 PHP 7.1+ 开始,
    rand()
  1. 只是
    mt_rand()
    的别名。
    虽然 
  2. mt_rand()
  3. 适用于简单用例(例如生成随机布尔值),但对于关键系统,您应该
    考虑替代方案
    (因为 mt_rand() 的结果是可以预测的)。
    
    
  4. 来源材料:

    如何在 PHP 中生成随机布尔值?
  • 如何在 PHP 中生成加密安全的随机布尔值?
© www.soinside.com 2019 - 2024. All rights reserved.