Vérifiez si plusieurs valeurs sont fausses ou tout est vrai
Comment puis-je vérifier si 20 variables sont tout à fait vrai, ou si 20 variables sont toutes fausses?
si possible sans l'aide d'un très long si ...
les variables sont en fait des éléments d'un tableau:
array('a'=> true, 'b'=> true ...)
pour rendre cela plus clair:
- si le tableau est à la fois vrai et faux les valeurs de retour rien
- si le tableau n'a qu'vraies valeurs de retour de la vraie
- si le tableau n'a qu'fausses valeurs return false
🙂
- afficher votre code svp
Vous devez vous connecter pour publier un commentaire.
array_unique
pour supprimer toutes les entrées en double et de vérifier ensuite si nous ne sommes qu'à gauche avec un seul élément, puis le retourner. Si le tableau ne contient que destrue
par exemple, aprèsarray_unique
, nous aurons à terme et un tableau avec un seultrue
pas de plus d'éléments.Vous pouvez utiliser in_array
Ex. pour tous les vrais:
On peut utiliser
array_product
tel que démontré à l' php.net dans un commentaire:Une simple boucle do. L'esprit que si le tableau est vide, les deux conditions sont remplies (tout est faux et tout est vrai). Vous ne verrez cela dans la suite, parce que de l'autre, mais vous pouvez trouver vous-même la façon dont vous souhaitez gérer cela.
Si vous stocker uniquement les booléens, utilisez ceci:
Remarque: si vous avez d'autres valeurs dans le tableau, ils seront convertis en booléen selon l'horrible des règles de conversion de PHP.
Cette question est ancienne, mais peu importe. Je voulais comparer les différentes approches. Le
in_array()
méthode donne de meilleurs résultats car il n'a probablement pas besoin de parcourir l'ensemble du tableau. (Les chances sont faibles, vous avez de l', mais un unique booléen à la fin, mais même alors, il fonctionne bien.)Une approche n'est pas mentionné ici est
array_sum($array)
, qui renvoie0
si toutes les valeurs sontfalse
, et1+
si il y a untrue
valeur quelque part. Comme learray_filter
approche, il ne vous dira pas si les deux sont présents, mais elle est utile pour déterminer si quelque chose esttrue
. J'ai également ajouté dans une baseforeach
vérifier mixte ou vrai/faux, et unin_array
qui vérifie juste si quelque chose n'esttrue
(comme*_bin
ci-dessous).Donc, ici, sont les points de repère. Chaque cas est itéré 100000 fois avec un tableau de 10, 100 ou 1000 aléatoire booléens; et encore avec de 9, 99, 999 identiques booléens, avec le dernier, l'unique à avoir plein d'itération de temps pour
in_array
). Trois premiers contrôles testés produire la demandetrue/false/both
résultat, et les quatre autres de vérifier simplement si untrue
valeur est présente.ALÉATOIRE BOOLÉENS
DERNIER BOOLEAN DIFFÈRE
Alors, en résumé. Le
array_unique
façon soutient clairement la queue, ne pas utiliser de tableaux de grande taille ou de grands volumes de tableaux! Leforeach
a un léger avantage surin_array
, mais, hélas, le code n'est pas tout à fait aussi élégant. Learray_sum
moyen est sur le pair avec le "si vrai" vérifie pour les plus petits (<100) des tableaux. (J'ai cherché la simplicité dansarray_sum($array) > 0
.) Learray_filter
façon traîne un peu derrièrein_array
etforeach
. Lorsque seule la dernière valeur est différente,foreach
etarray_unique
à la fois de glisser le mauvais.Enfin, la
foreach
fonction pour de bonnes humeurs. Très lisible. La vérité est là!P. S. Pourrait utiliser 'null', ci-dessus, mais il se lit plus amusant de cette façon autour de. Comparé à Windows de sorte que le microtime lectures sont chunky.
Si ils sont tous les éléments du tableau, avec de vraies/fausses valeurs, puis utilisez array_flip():
$new = array_flip($array);
if (!isset($array[false]) && isset($array[true])) {
... there's no false values, and at least one true value
}
Cela pourrait coûter cher pour un grand tableau, de sorte que vous pouvez essayer de
array_unique()
à la place. Vous obtenez un tableau avec au plus deux valeurs (un vrai, un faux).Ok, donc ça ne fonctionne pas. Simple fusil de chasse:
PHP Warning: array_flip(): Can only flip STRING and INTEGER values! in ...
même si cela POURRAIT mettre le vrai/faux de 1/0.Plus de plus vous pouvez avoir une liste de variables (pas seulement un tableau de valeurs) afin de vérifier toutes les valeurs par rapport à une certaine valeur.
Utiliser une boucle for. Si vous voulez vérifier que toutes les variables sont faux, vous pouvez utiliser une boucle for: une fois que vous trouver un vrai élément, vous pouvez briser le cycle, sinon les variables sont toutes fausses. Même méthode que vous pouvez utiliser si vous voulez vérifier que toutes les variables sont vraies.