2010-09-30 13 views
8

¿Hay una manera simple de comprobar si todos los valores en el conjunto son iguales entre sí?Comprobación de todos los valores de matriz a la vez

En este caso, sería return false:

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

Y en este caso, es cierto:

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

Así que, sí, hay una función/método para comprobar todos los valores de la matriz en ¿una vez?

¡Gracias de antemano!

+0

no pensé que era una pregunta muy interesante, pero hay una gran variedad de respuestas fresco. Bonito. – Hans

+0

@Hans De acuerdo, cada respuesta tiene su propio giro único, ¡resultados muy interesantes! – jolt

Respuesta

29
No

una sola función, pero lo mismo se podría lograr fácilmente con (?):

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

¡De todas las soluciones proporcionadas, esta fue la más fácil de entender, ofrece la mayoría de las funcionalidades y es realmente simple! +1, aceptado. Gran bonificación por ese 'sí 'cheque. – jolt

+0

array_keys es de hecho mejor que array_count_values, porque también puede verificar elementos de matriz/objeto y aplicar estricta comparación cuando lo desee – user187291

+0

no se olvide de establecer el parámetro estricto cuando su valor sea algo así como 0 --- array_keys ($ array, 0 , verdadero) – abimelex

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

o mejor

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

otra opción posible

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

Más elegante y más inteligente. Por supuesto, 'count()' debe ser '1' con [array_unique()] (http://php.net/manual/en/function.array-unique.php) porque" devuelve una nueva matriz sin valores duplicados " –

1

"Todos los valores son iguales" es equivalente a "todos los valores" igual al primer elemento", por lo que me gustaría hacer algo como esto:

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

Aquí hay otra manera de hacerlo, usando array_diff con listas

En mi caso, tuve que comprobar con respecto a las matrices que tenían todas las cadenas vacías:

$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 
} 
Cuestiones relacionadas