2012-07-05 17 views
5

He escrito el siguiente código para comprobar si una matriz es asociativo o noComparando matriz de claves de matriz asociativa a entero matriz indexada

function is_associative($arr) { 
    $arr = array_keys($arr); 
    return $arr != array_keys($arr); 
} 

Devuelve cierto para los arreglos como:

array("a" => 5,"b" => 9); 

y falso para matrices numéricas

Pero no devuelve verdadero para matrices asociativas con un solo elemento como:

array("a" =>9); 

¿Por qué devuelve falso para las matrices asociativas con un solo elemento?

+1

Debe usar 'array_diff' – alfasin

Respuesta

8

Es necesario utilizar !== en su comparación:

return $arr !== array_keys($arr); 

Esto genera el correct output de ambos siendo cierto.

lo contrario tipo malabares considerará los valores para la matriz solo elemento como igual:

array(1) { [0]=> string(1) "a" } 
array(1) { [0]=> int(0) } 

Aquí, "a" == 0 es cierto (como "a" está en silencio echados a 0), pero "a" === 0 es falso.

+0

sí, ese fue el problema: gracias –

+0

¿Por qué no son del mismo tipo cuando se trata de una matriz de elementos únicos? –

+1

@JinuJD - He actualizado mi respuesta con una descripción más clara de lo que está sucediendo – nickb

Cuestiones relacionadas