web-dev-qa-db-ja.com

PHPでランダムなブール値true / falseを取得する

PHPでランダムなブール値true/falseを取得する最もエレガントな方法は何ですか?

私は考えることができます:

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

しかし、整数をブールにキャストすることには欠点がありますか?

または、これはこれを行う「公式の」方法ですか?

42
Max Girkens

ブール型のキャストを望まない場合(それが何か問題があるわけではない)、次のように簡単にブール型にすることができます。

_$value = Rand(0,1) == 1;
_

基本的に、ランダムな値が_1_の場合、trueを返し、そうでない場合はfalseを返します。もちろん、_0_または_1_の値は、ブール値として既にactsです;したがって、この:

_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);
_
93
Ja͢ck

私は単純に使用します

Rand(0,1) < 0.5