2010-09-30 4 views
8

Existe-t-il un moyen simple de vérifier si toutes les valeurs dans le tableau sont égales les unes aux autres?Vérification de toutes les valeurs de tableau à la fois

Dans ce cas, il retourne faux:

$array[0] = 'yes'; 
$array[1] = 'yes'; 
$array[2] = 'no'; 

Et dans ce cas, vrai:

$array[0] = 'yes'; 
$array[1] = 'yes'; 
$array[2] = 'yes'; 

Alors, oui, est-il une fonction/méthode pour vérifier toutes les valeurs de tableau à une fois que?

Merci d'avance!

+0

Je ne pensais pas que c'était une question très intéressante, mais il y a une variété de réponses fraîche. Agréable. – Hans

+0

@Hans D'accord, chaque réponse a sa propre touche unique, des résultats très intéressants! – jolt

Répondre

29

Pas une seule fonction, mais la même chose pourrait être atteint facilement avec (?):

count(array_keys($array, 'yes')) == count($array) 
+0

De toutes les solutions fournies, c'était le plus facile à comprendre, le plus fonctionnel et le plus simple! +1, accepté. Un énorme bonus pour ce "oui" chèque. – jolt

+0

array_keys est en effet meilleur que array_count_values, parce que vous pouvez également vérifier les éléments array/object et appliquer une comparaison stricte si vous le souhaitez – user187291

+0

ne pas oublier de définir le paramètre strict lorsque votre valeur est quelque chose comme 0 --- array_keys ($ array, 0 , true) – abimelex

2
if($a === array_fill(0, count($a), end($a))) echo "all items equal!"; 

ou mieux

if(count(array_count_values($a)) == 1)... 
8

une autre option possible

if(count(array_unique($array)) == 1) 
+0

Le plus élégant et le plus intelligent. Bien sûr, 'count()' doit être '1' avec [array_unique()] (http://php.net/manual/fr/function.array-unique.php) car il" renvoie un nouveau tableau sans valeurs en double " –

1

"Toutes les valeurs identiques" équivaut à "toutes les valeurs" égal au premier élément », donc je ferais quelque chose comme ceci:

function array_same($array) { 
    if (count($array)==0) return true; 

    $firstvalue=$array[0]; 
    for($i=1; $i<count($array); $i++) { 
     if ($array[$i]!=$firstvalue) return false; 
    } 
    return true; 
} 
0

est ici encore une autre façon de s'y prendre, en utilisant array_diff des listes

Dans mon cas, je devais tester contre des réseaux qui avait toutes les chaînes vides:

$empty_array = array('','',''); // i know ahead of time that array has three elements 
$array_2d = array(); 
for($array_2d as $arr) 
    if(array_diff($arr,$empty_arr)) // 
     do_stuff_with_non_empty_array() 
0
if(count(array_unique($array)) === count($array)) { 
    // all items in $array are the same 
}else{ 
    // at least one item is different 
} 
Questions connexes