在PHP中获取随机布尔值true/false的最优雅方法是什么?
我能想到:
$value = (bool)rand(0,1);
Run Code Online (Sandbox Code Playgroud)
但是将整数转换为布尔值会带来任何缺点吗?
或者这是一种"官方"的方式吗?
前段时间我写了一个随机字符串生成器,它使用字符串中的mt_rand()字符构建一个字符串,直到达到所需的长度.
public function getPassword ()
{
if ($this -> password == '')
{
$pw = '';
$charListEnd = strlen (static::CHARLIST) - 1;
for ($loops = mt_rand ($this -> min, $this -> max); $loops > 0; $loops--)
{
$pw .= substr (static::CHARLIST, mt_rand (0, $charListEnd), 1);
}
$this -> password = $pw;
}
return $this -> password;
}
Run Code Online (Sandbox Code Playgroud)
(CHARLIST是一个类常量,包含密码的字符池.$ min和$ max是长度约束)
今天,当我完全研究其他东西时,我偶然发现了以下代码:
function generateRandomString ($length = 10) {
return substr(str_shuffle ("0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"), 0, $length);
}
Run Code Online (Sandbox Code Playgroud)
这与我在一行中基于循环mt_rand()的代码实现了几乎相同的效果.我非常喜欢它,原因很简单,更少的代码行总是好事.:)
但是当我在PHP的手册中查找str_shuffle时,它的文档很轻松.我真正热衷于学习的一件事是它用于随机性的算法是什么?手册没有提到为获得混洗字符串做了什么样的随机化.如果它使用rand()而不是mt_rand()那么坚持我当前的解决方案可能会更好.
所以基本上我想知道str_shuffle如何随机化字符串.它是使用rand()还是mt_rand()?我正在使用我的随机字符串函数来生成密码,因此随机性的质量很重要.
更新:正如已经指出的那样,str_shuffle方法不等同于我已经使用的代码,并且由于字符串的字符与输入保持相同而且随着它们的顺序改变而变得不那么随机.但是我仍然对str_shuffle函数如何随机化其输入字符串感到好奇.