Get random boolean true/false in PHP
在PHP中获得随机布尔值true / false的最优雅方法是什么?
我能想到的是:
1
| $value = (bool )rand(0,1); |
但是将整数转换为布尔值会带来任何不利吗?
这是执行此操作的"官方"方法吗?
- mt_rand()优于rand(),请检查此答案
-
这是一个可以执行您所需的确切任务的班轮。您有什么缺点?
-
为了提高可读性,我建议使用rand(0,1) == 1或rand(0,1) > 0。隐式转换,尽管有文档记录,但很难理解。
-
这就是我要使用的:array_rand(array(True, False))。
-
如果只需要"真实性",则无需显式转换为布尔值。 0表示虚假,1表示真实。
如果您不希望进行布尔类型转换(不是这有什么问题),可以轻松地将其设置为布尔值,如下所示:
基本上,如果随机值为1,则输出true,否则为false。当然,0或1的值已作为布尔值;所以这:
这是一个完全有效的条件,将按预期运行。
或者,您可以将mt_rand()用于生成随机数(这是对rand()的改进)。您甚至可以使用以下代码来达到openssl_random_pseudo_bytes():
1
| $value = ord(openssl_random_pseudo_bytes (1)) >= 0x80; |
更新
在PHP 7.0中,您将能够使用random_int(),它会生成加密安全的伪随机整数:
1
| $value = (bool)random_int(0, 1); |
我只是使用
- 这对于微调随机性和使随机布尔不只是50%的时间均匀地随机化也是很有用的,例如rand(0, 1) < 0.25。
-
我认为必须要rand(0, 100) < 25才能有效@neave
-
值得注意的是,严格来讲,此方法略微偏向false,因为true = 0-0.499999和false = 0.5-1.0(还有0.000001)。
出于完整性考虑,如果要在if条件下使用它,则无需强制转换,因为0被视为false:
注意:mt_rand比rand
快4倍
The mt_rand() function is a drop-in replacement for the older rand(). It uses a random number generator with known characteristics using the"Mersenne Twister", which will produce random numbers four times faster than what the average libc rand() provides.
php stan推荐
-
这取决于您的需要,性能方面,我认为使用random_int()而不是rand()会花费更多,在stackoverflow.com/questions/44228718/php-rand-vs-random-int中有更多相关信息
-
PHPStan与给定问题有何关系?