77

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

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

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

しかし、整数をブール値にキャストすると、不利な点が生じるでしょうか?

それとも、これはこれを行う「公式」の方法ですか?

4

4 に答える 4

147

ブール値のキャストを使用したくない場合 (問題があるというわけではありません)、次のように簡単にブール値にすることができます。

$value = rand(0,1) == 1;

基本的に、ランダムな値が の場合は1yield true、そうでない場合は になりますfalse。もちろん、0orの値は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);
于 2013-10-07T10:51:34.833 に答える
9

私は単純に

rand(0,1) < 0.5
于 2017-08-19T08:54:54.413 に答える
4

完全を期すために、条件で使用する場合は、次のように考慮ifされるため、キャストする必要はありません。0false

if (mt_rand(0,1)) {
  // whatever
}

注:mt_randは 4 倍高速ですrand

このmt_rand()機能は、古い のドロップイン置換ですrand()。「Mersenne Twister」を使用して既知の特性を持つ乱数ジェネレーターを使用します。これは、平均的な libcが提供するよりも4 倍高速に乱数を生成rand()します。

于 2020-05-12T01:02:03.703 に答える