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

时间:2013-10-07 10:41:23

标签: php random boolean

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

我能想到:

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

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

或者这是一个"官员"这样做的方法?

5 个答案:

答案 0 :(得分:89)

如果你不希望有一个布尔强制转换(不是说它有什么问题)你可以很容易地把它变成这样的布尔值:

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

基本上,如果随机值为1,则为true,否则为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);

答案 1 :(得分:5)

我使用简单的

rand(0,1) < 0.5

答案 2 :(得分:1)

出于完整性考虑,如果您想在if条件下使用它,则无需强制转换,因为0被认为是false

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

注意:mt_randrand快4倍

mt_rand()函数可以替代较旧的rand()。它使用具有“ Mersenne Twister”特征的已知随机数生成器,该生成器生成随机数的速度将比rand()所提供的平均libc快四倍。

答案 3 :(得分:0)

建议使用php

1 === random_int(0, 1)

答案 4 :(得分:0)

从技术上讲,其性能不如其他答案-但您也可以使用类型强制:

if(!!rand(0, 1)) {
  // random
}