Obtenir aléatoire booléen true / false en PHP

quelle serait la façon la plus élégante d'obtenir un vrai/faux booléen aléatoire en PHP?

je pense:

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

Mais le coulage d'un entier booléen apporter des inconvénients?

ou est-ce une façon "officielle" de le faire?

35
demandé sur Max Girkens 2013-10-07 14:41:23

2 réponses

si vous ne voulez pas avoir un cast booléen (non pas qu'il y ait quelque chose de mal avec cela) vous pouvez facilement en faire un booléen comme ceci:

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

en gros, si la valeur aléatoire est 1, le rendement true sinon false. Bien sûr, une valeur de 0 ou 1 déjà lois comme valeur booléenne; donc ceci:

if (rand(0, 1)) { ... }

est une condition parfaitement valide et fonctionnera comme prévu.

Alternativement, vous pouvez utiliser mt_rand() pour la génération de nombres aléatoires (c'est une amélioration par rapport à rand()). Vous pouvez même aller aussi loin que openssl_random_pseudo_bytes() avec ce code:

$value = ord(openssl_random_pseudo_bytes(1)) >= 0x80;

mise à Jour

en PHP 7.0 vous pourrez utiliser random_int(), qui génère des entiers pseudo-aléatoires cryptographiquement sûrs:

$value = (bool)random_int(0, 1);
74
répondu Ja͢ck 2015-07-06 23:23:16

j'utilise simplement

rand(0,1) < 0.5
4
répondu Alessandro Battistini 2017-11-21 08:08:57