A veces, en casos muy concretos, es interesante saber si un array es asociativo o es una mera lista de elementos.
La diferencia entre tener un array asociativo (o mapa/diccionario/…), y una mera lista de elementos, es que no hay claves para acceder a los valores.
Básicamente, la diferencia expresada en código sería:
<?php $asociativo = array ("key1" => "value1", "key2" => "value2", "keyN" => "valueN"); $lista = array ("value1", "value2", "valueN");
Aunque uno pueda pensar que es sencillo saber si un array es un diccionario o es una lista, no existe ninguna función en PHP (al menos no la he encontrado), que te de esta información. Y programarlo no es demasiado complicado, pero tampoco se hace en 2 minutos.
A continuación, para el que le interese, pongo las funciones is_list y is_dict que básicamente nos dicen si un array es una lista o un diccionario (con sólo una llamada podremos diferenciarlos):
<?php function is_list ($array) { if (!is_array ($array)) return false; $keys = array_keys ($array); foreach ($keys as $key) { if (!is_numeric ($key)) return false; } return true; } function is_dict ($array) { return is_array ($array) && !is_list ($array); }
Y como ejemplo, tras ejecutar el siguiente código:
<?php echo "asociativo: " . (is_dict ($asociativo) ? "DICCIONARIO!" : "No diccionario..."); echo "lista: " . (is_dict ($lista) ? "DICCIONARIO!" : "No diccionario..."); echo "\n"; echo "asociativo: " . (is_list ($asociativo) ? "LISTA!" : "No lista..."); echo "lista: " . (is_list ($lista) ? "LISTA!" : "No lista...");
Se obtiene como salida:
asociativo: DICCIONARIO! lista: No diccionario... asociativo: No lista... lista: LISTA!
Que es justo lo que queremos
English
04/03/2011 at 7:01 am Permalink
está buena la función, aunque si tengo un array asociativo con claves numericas me da que se trata de un array no asociativo.