martes, junio 19, 2007

Array, equivalencias e igualdades.

Cuanto más leo el libro de la certificación más "curiosidades" me encuentro. PHP cuenta con 11 funciones distintas para ordenar array's, un número nada despreciable. También veo que los array's pueden ser equivalentes (==) o identicos (===). Ser equivalente no es igual a ser identicos, pero no solo eso, sino que estas comparaciones estan atados a algunos "detallitos".

$uno = array('a', 'b', 'c', 'd');
$dos = array(1 => 'b', 'c', 'd', 0 => 'a');

if(
$uno == $dos)
echo
'$uno y $dos son equivalentes.';

if(
$uno === $dos)
echo
'$uno y dos son identicos.';

Resultado:

$uno y $dos son equivalentes.

Como bien vimos arriba, ambos array's tienen todos los elementos con la misma clave pero en diferente orden, por este motivo se los concidera equivalentes, pero no identicos.

Lamentablemente, lo anterior solo fue el principio. También hay un "detallito" con algunas reglas en las claves de los array's. Con estas reglas se debe tener cuidado pero no haré una explicación teorica escrita, lo demostrare con un ejemplo:

$uno = array(10 => 1);
$dos = array('10' => 1);

if(
$uno == $dos)
echo
'$uno y $dos son equivalentes.';

if(
$uno === $dos)
echo
'$uno y dos son idénticos.';

Devuelve:

$uno y $dos son equivalentes.
$uno y dos son idénticos.

Lo anterior no debería sorprenderno cuando lo siguiente se evalua como verdadero.

if( "10dario" == 10)
echo
'Verdadero';

Lo anterior se evalúa como verdadero porque PHP cuando hace una comparación primero homologa ambos términos haciendo casting si fuere necesario, en el caso de la cadena se hace casting y el resultado termina siendo un 10 entero y por consiguiente evaluandoce como verdadero.

Como ven, los array's en PHP son una cosa curiosa y debemos prestar especial atención... es una lastima que toda esta info este "escondida" y no se sepa o se muestre en los tutoriales que se suelen leer cuando uno aprende, este tema de seguro a provocado más de un dolor de cabeza.

Dario Ocles.