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

Max*_*ens 46 php random boolean

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

我能想到:

$value = (bool)rand(0,1);
Run Code Online (Sandbox Code Playgroud)

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

或者这是一种"官方"的方式吗?

Ja͢*_*͢ck 100

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

$value = rand(0,1) == 1;
Run Code Online (Sandbox Code Playgroud)

基本上,如果随机值是1,则收益率true,否则false.当然,值01已经充当为一个布尔值; 所以这:

if (rand(0, 1)) { ... }
Run Code Online (Sandbox Code Playgroud)

是一个完全有效的条件,将按预期工作.

或者,您可以使用mt_rand()随机数生成(这是一个改进rand()).您甚至可以openssl_random_pseudo_bytes()使用此代码:

$value = ord(openssl_random_pseudo_bytes(1)) >= 0x80;
Run Code Online (Sandbox Code Playgroud)

更新

在PHP 7.0中,您将能够使用random_int(),它生成加密安全的伪随机整数:

$value = (bool)random_int(0, 1);
Run Code Online (Sandbox Code Playgroud)


jpe*_*nna 8

只是为了完整性,如果您想在if条件中使用它,则无需进行强制转换,因为0被考虑falsemt_rand产生范围内的随机整数:

if (mt_rand(0,1)) { // 0 = false, 1 = true
  // whatever
}
Run Code Online (Sandbox Code Playgroud)

注意:mt_rand比 快 4 倍rand

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


Ale*_*ini 5

我用的很简单

rand(0,1) < 0.5
Run Code Online (Sandbox Code Playgroud)

  • 我认为需要`rand(0,100)<25`才能有效@neave (4认同)
  • 这对于微调随机性和使随机布尔值在50%的时间内不是均匀随机的布尔值也很有用,例如rand(0,1)&lt;0.25。 (2认同)
  • 值得注意的是,严格来说,此方法稍微偏向于false,因为true = 0-0.499999和false = 0.5-1.0(还有0.00001)。 (2认同)