2011-01-15 16 views
31

Nunca me he encontrado con esto antes, pero ¿cómo probarías si tres variables son iguales? La siguiente, obviamente, no funciona, pero no puedo pensar en una manera elegante (y correcta) para escribir el siguiente:PHP: Probando si tres variables son iguales

if ($select_above_average === $select_average === $select_below_average) { }

Respuesta

49
if ((a == b) && (b == c)) { 
    ... they're all equal ... 
} 

por el transitive relation

+2

¡Gracias! ¡También obtuve un buen artículo de Wikipedia! – Matty

+5

Usa '===', no '=='. La igualdad suelta de PHP no es transitiva. – Brilliand

+1

Cabe señalar que los paréntesis alrededor de cada comparación * no * son obligatorios. –

8
if ($select_above_average === $select_average 
    && $select_average === $select_below_average) { } 
18
$values = array($select_above_average, $select_average, $select_below_average); 

if(count(array_unique($values)) === 1) { 
    // do stuff if all elements are the same 
} 

sería otra manera de hacerlo.

+9

Yowza, habla de conducir 500 millas para obtener un Slurpee en el 7-11 en lugar caminando hacia la cuadra hacia el 7-11 allí. –

+1

Pero muy ineficiente. – Dogbert

+0

:) Es por eso que dije otra manera. Porque la respuesta ya ha sido dada :) Tuve que reírme de tu comentario. – PeeHaa

5

ya tiene su respuesta por Adam, pero una buena manera de recordar cómo hacer esto correctamente es recordar para una única validación que debe envoltura en () apoyos, si su único haciendo un solo control, entonces ya cuenta con las llaves proporcionadas por la declaración ().

Ejemplo:

si (una === b)

y si su haciendo múltiple entonces

si ((una === b) & & (C === d))

Sop si se recuerda que cada juego de llaves es una comprobación de validación, puede tener entrada como esta:

si (((a === b) || (c === d)) & & (e === f))

si las declaraciones y muchas otras operaciones lógicas trabajan en jerarquía de modo que la cantidad de individuo los cheques dentro de un cheque tienen un efecto en el cheque principal.

teniendo el tercer ejemplo anterior si a === b o c === d falla, entonces e === f Nunca se comprobará como el ab, cd está envuelto en los apoyos de manera que se devuelve y marcada.

Espero que esto te ayude un poco más.

+1

Esto fue útil y ejemplo útil. ¡Aclamaciones! –

1

Tuve una situación única en la que necesitaba ver si la cantidad de elementos en tres matrices era similar a esta situación.

Esto es lo que ocurrió:

(Suponga que los campos, operadores y valores son todos los arrays)

$allfieldscount = array(count($fields), count($operators), count($values)); //store an array of the count of all the arrays. 

$same = array_count_values($allfieldscount);//returns an array by values in the array. We are looking to see only 1 item in the array with a value of 3. 

if(count($same) != 1){ 
    //Then it's not the same 
}else{ 
    //Then it's the same 
} 

Esta táctica cuenta los campos en las diferentes matrices y mediante el uso array_count_values ​​si son todos iguales, entonces el recuento de la matriz que devuelve será '1'; si es otra cosa, no es lo mismo. Busque array_count_values ​​en php.net para comprender mejor lo que está haciendo.

Cuestiones relacionadas