PHPでランダムなブール値の真/偽を取得する最もエレガントな方法は何ですか?
私は考えることができます:
$value = (bool)rand(0,1);
しかし、整数をブール値にキャストすると、不利な点が生じるでしょうか?
それとも、これはこれを行う「公式」の方法ですか?
ブール値のキャストを使用したくない場合 (問題があるというわけではありません)、次のように簡単にブール値にすることができます。
$value = rand(0,1) == 1;
基本的に、ランダムな値が の場合は1
yield true
、そうでない場合は になりますfalse
。もちろん、0
orの値は1
すでにブール値として機能しています。したがって、この:
if (rand(0, 1)) { ... }
完全に有効な状態であり、期待どおりに機能します。
mt_rand()
または、乱数の生成に使用できます(より改善されていrand()
ます)。openssl_random_pseudo_bytes()
次のコードを使用することもできます。
$value = ord(openssl_random_pseudo_bytes(1)) >= 0x80;
random_int()
PHP 7.0 では、暗号的に安全な疑似乱数整数を生成するを使用できます。
$value = (bool)random_int(0, 1);
私は単純に
rand(0,1) < 0.5
完全を期すために、条件で使用する場合は、次のように考慮if
されるため、キャストする必要はありません。0
false
if (mt_rand(0,1)) {
// whatever
}
注:mt_rand
は 4 倍高速ですrand
この
mt_rand()
機能は、古い のドロップイン置換ですrand()
。「Mersenne Twister」を使用して既知の特性を持つ乱数ジェネレーターを使用します。これは、平均的な libcが提供するよりも4 倍高速に乱数を生成rand()
します。