Je dois vérifier si toutes les valeurs d'un tableau sont égales.
Par exemple:
$allValues = array(
'true',
'true',
'true',
);
Si chaque valeur du tableau est égale à 'true'
, alors je veux faire écho à 'all true'
. Si une valeur du tableau est égale à 'false'
, alors je veux faire écho à 'some false'
Une idée sur comment je peux faire ça?
toutes les valeurs sont égales à la valeur de test
if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') {
}
ou simplement tester l'existence de ce que vous ne voulez pas.
if (in_array('false', $allvalues, true)) {
}
Préférez cette dernière méthode si vous êtes certain qu'il ne peut y avoir que 2 valeurs possibles dans le tableau, car c'est beaucoup plus efficace. Mais en cas de doute, un programme lent vaut mieux qu'un programme incorrect, utilisez donc la première méthode.
Si vous ne pouvez pas utiliser la deuxième méthode, votre tableau est très grand et son contenu est probable avoir plus d'une valeur (surtout si la valeur est susceptible de se produire au début de tableau), il peut être beaucoup plus rapide de procéder comme suit:
function isHomogenous($arr) {
$firstValue = current($arr);
foreach ($arr as $val) {
if ($firstValue !== $val) {
return false;
}
}
return true;
}
* remarque - Certaines réponses interprètent la question initiale comme 1) how to check if all values are the same
, alors que d'autres l'interprètent comme 2) how to check if all values are the same AND make sure that value equals the test value
. La solution que vous choisissez doit tenir compte de ce détail. Mes deux premières solutions ont répondu # 2. Ma fonction isHomogenous()
répond à la question n ° 1, bien que vous puissiez la modifier pour donner la réponse n ° 2 en transmettant la valeur de $firstValue
comme valeur de test, au lieu d'utiliser la première valeur trouvée dans le tableau comme je l'ai fait.
Si votre tableau contient des booléens réels (ou ints) au lieu de chaînes, vous pouvez utiliser array_sum
:
$allvalues = array(TRUE, TRUE, TRUE);
if(array_sum($allvalues) == count($allvalues)) {
echo 'all true';
} else {
echo 'some false';
}
Cela fonctionne parce que TRUE
sera évalué en tant que 1
et FALSE
en tant que 0
.
De plus, vous pouvez condenser la réponse de chèvre si ce n'est pas un binaire:
if (count(array_unique($allvalues)) === 1 && end($allvalues) === 'true') {
// ...
}
à
if (array_unique($allvalues) === array('foobar')) {
// all values in array are "foobar"
}
Pourquoi ne pas simplement comparer le nombre après avoir appelé array_unique()
?
Pour vérifier si tous les éléments d’un tableau sont identiques, procédez comme suit:
$allValuesAreTheSame = (count(array_unique($allvalues)) === 1);
Cela devrait fonctionner quel que soit le type de valeurs du tableau.
Vous pouvez comparer min et max ... pas le moyen le plus rapide; p
$homogenous = ( min($array) === max($array) );
Une autre option:
function same($arr) {
return $arr === array_filter($arr, function ($element) use ($arr) {
return ($element === $arr[0]);
});
}
Usage:
same(array(true, true, true)); // => true
$alltrue = 1;
foreach($array as $item) {
if($item!='true') { $alltrue = 0; }
}
if($alltrue) { echo("all true."); }
else { echo("some false."); }
Techniquement, cela ne vérifie pas "certains faux", mais "tous les vrais". Mais il semble que vous soyez pratiquement sûr que les seules valeurs que vous obtiendrez seront "true" et "false".