2011-03-25 18 views
5

Duplicar posible:
PHP Arrays: A good way to check if an array is associative or sequential?¿Cómo comprobar si la matriz está en la lista?

Hola :)

Me preguntaba cuál es la (mejor) camino más corto para comprobar si una matriz es

una lista : array('a', 'b', 'c')

O es una matriz asociativa: array('a' => 'b', 'c' => 'd')

FYI: Necesito esto para hacer una función personalizada json_encode

+3

posible duplicado de [PHP Arrays: ¿una buena forma de comprobar si una matriz es asociativa o secuencial?] (Http://stackoverflow.com/questions/173400/php-arrays-a-good-way-to-check -if-a-array-is-associative-or-sequential) ¿Por qué necesitas construir una función 'json_encode' personalizada? ¿Estás en una versión de PHP que aún no la tiene? Hay paquetes prefabricados para ese caso. –

+0

Las implementaciones de 'json_encode' están disponibles para su descarga, así que tal vez las revise y personalice. Aquí hay uno: http://www.boutell.com/scripts/jsonwrapper.html – Joost

+0

@Pekka Necesito poder enviar funciones de JavaScript desde el archivo php – Teneff

Respuesta

12
function is_assoc($array){ 
    return array_values($array)!==$array; 
} 

Nota que también devolverá TRUE si está indexado matriz, pero que no tenga agujeros o no lo hace comienza con 0 o las teclas no están ordenadas. Por lo general, prefiero usar esta función porque ofrece el mejor rendimiento posible. Como una alternativa para estos casos yo prefiero esto (sólo tener en cuenta que es casi 4 veces más lenta que la anterior):

function is_assoc($array){ 
    return !ctype_digit(implode('', array_keys($array))); 
} 

Usando ksort() como Rinuwise comentó es un poco más lento.

+3

Tenga en cuenta que esto no funciona, si las claves de la matriz no están en orden en la matriz. Si no se desea, se puede evitar ejecutando ksort() en la matriz antes de la comparación. – Riimu

+0

Gracias por tu comentario. Mejoré mi respuesta con esos casos. – Slava

+0

si las claves como "080" esto va a estar mal. Ejemplo de matriz ('0' => 1, '08' => 2); – ZigZag

Cuestiones relacionadas