martes, 8 de mayo de 2012

7. SESION: Tablas o Arrays

·         Uso de Arrays

Ordenar arrays
Podemos ordenar los elementos de un array, tanto en orden ascendente (de menor a mayor), como en orden desdendente (de mayor a menor). Si el array contiene elementos númericos esto es fácil de entender, pero si los elementos son cadenas de texto, la ordenación se hará por orden alfabético.
Para ello utilizaremos las siguientes funciones, en todas ellas dentro del paréntesis (parámetro) escribiremos la variable que contiene el array:
En arrays indexados

    sort($array): Ordena el array en orden ascendente
    rsort($array): Ordena el array en orden descendente

En arrays asociativos

    asort($array): Ordena el array en orden ascendente por valor.
    arsort($array): Ordena el array en orden descendente por valor.
    ksort($array): Ordena el array en orden ascendente por clave.
    krsort($array): Ordena el array en orden descendente por clave.

Estas funciones cambian el orden de los elementos en el array original, por lo que si queremos conservar el array original debemos hacerle una copìa , Después podremos trabajar con la copia o, si trabajamos con el original, recuperar su estado inicial asignando su valor a la copia (operador de asignación =).
Insertar elementos
Insertar un elemento en un array asociativo es lo mismo que asignarle al array un nuevo elemento con una nueva clave.
Seguiremos con el array de ejemplo de la página anterior:
$cap=array("España"=>"Madrid", "Francia"=>"París", "Inglaterra"=>"Londres", "Italia"=>"Roma", "Portugal"=>"Lisboa", "Alemania"=>"Berlín");
Si queremos insertar un nuevo elemento lo haremos de la siguiente manera:
$cap["Bélgica"]="Bruselas";
El elemento se añadirá al final del array. Si la clave proporcionada corresponde con la de algún elemento ya existente, éste cambiará su valor. Si el array estaba ordenado, bien por claves o por valores, para volver a ordenarlo aplicaremos alguna de las funciones vistas anteriormente.
Añadir elementos en un array indexado es algo más complicado, ya que si lo hacemos como en los arrays asociativos, en el corchete debemos escribir el número del elemento, en este caso, el valor dado sustituye al del elemento que ocupa ese lugar.
Existen sin embargo una serie de funciones que añaden elementos a un array indexado. Estas son:
array_push($array,"elemento1","elemento2");: añade elementos al final del array, dándoles como índice el número que les corresponda. Dentro del paréntesis escribiremos el nombre del array, y después separado por una coma, el elemento o elementos que queramos insertar. Podemos poner un sólo elemento o varios, separados por comas.
array_unshift($array,"elemento1","elemento2");: añade elementos al principio del array, los índices de los demás elementos se reordenan según su posición. Los parámetros pasados dentro del paréntesis son iguales que en la función anterior.
array_pad($array,"tamaño","elemento_relleno");: Esta función da un nuevo tamaño al array. los nuevos elementos creados Tendrán el valor del "elemento de relleno". los parámetros que pasamos en el paréntesis son:

    $array: nombre del array que pretendemos modificar.
    "tamaño": nuevo tamañó que tendrá el array.
    "elemento_relleno": Valor que tendrán los nuevos elementos que se formen al dar un nuevo tamaño.

Eliminar elementos
Existen también varias funciones para eliminar elementos de un array. Estas son:
array_shift($array): Elimina el primer elemento del array.
array_pop($array): Elimina el último elemento del array.
array_keys($array,"valor"): Elimina el elemento cuyo valor coincida con "valor"
array_unique($array): Elimina los elementos repetidos que haya en el array
Otras funciones
Veremos aquí otras funciones útiles para trabajar con arrays, aunque no vamos a verlas todas, éstas son las más habituales:
array_reverse($array);: Devuelve un array con los mismos elementos pero en orden inverso.
in_array($array,"valor");: Comprueba si un valor está dentro de del array. Devuelve un valor boleano (verdadero 1 o falso "")
array_slice($array,posicion,tamaño);: Extraemos parte de los elementos de un array indexado en un nuevo array, para ello $array, es el array del que partimos. posicion es el índice del elemento a partir del cual se formará el nuevo array, y en tamaño indicaremos aquí el número de elementos que tendrá el nuevo array. Si no ponemos este último parámetro el nuevo array se forma desde el elemento indicado en posicion hasta el final.
array_values($array);: Devuelve un array indexado cuando le pasamos un array asociativo. Las claves se eliminan, y en su lugar tenemos los índices.
array_merge($array1,$array2);: Devuelve un array que tendrá los elementos de los dos arrays pasados como parámetros, es decir el nuevo array consiste en la suma de los otros dos.
Arrays multidimensionales
Como hemos visto anteriormente, un array es una lista en la que se guardan varios datos o elementos. Sin embargo muchas veces una lista no es suficiente para guardar los datos, y estos quedan mejor si los guardamos en una tabla.
La solución para guardar una tabla en un array es crear un array multidimensional, es decir un array en el que cada uno de sus elementos es a su vez otro array.
En el array principal guardaremos la tabla. mientras que en cada uno de sus elementos guardaremos una fila de la tabla.
Nada nos impide que cada uno de los elementos de los arrays que forman las filas sea a su vez otro array, con lo que podríamos tener un array en tres dimensiones. También podemos formar arrays de más de tres dimensiones, aunque puede ser que sea dificil de manejarlos.
Es conveniente que para llevar un cierto orden en la tabla que queremos mostrar, cada uno de los arrays secundarios (filas) tenga el mismo número de elementos, así facilitaremos el trabajo de visualización en pantalla.
para mostrar los arrays multidimensionales en pantalla necesitaríamos un código muy complicado, ya que según lo visto hasta ahora debemos mostrar uno a uno todos los elementos. Sin embargo existen una serie de estructuras que veremos más adelante, que hacen que esto se simplifique bastante.

·         Tipos de Declaraciones

La forma más simple de definir un array es mediante la instrucción array(). Dentro del paréntesis escribimos los valores o variables que contiene el array, separados por comas:
$temporadas=array("primavera", "verano", "otoño", "invierno");
Dentro del array podemos poner todo tipo de datos, tanto cadenas de texto, como números enteros o decimales, o booleanos, o poner variables que contengan esos datos, El siguiente array mezcla todo tipo de datos:
$miarray=array("Juan",,32,17.5,true);

Definir un array por sus elementos
También podemos definir un array definiendo directamente sus elementos, por ejemplo si escribimos:
$turnos[0]="mañana";
$turnos[1]="tarde";
$turnos[2]="noche";
Es lo mismo que si hubieramos escrito:
$turnos= array("mañana","tarde",noche");
Esta forma de definir arrays simplemente definiendo sus elementos plantea algunos problemas: por ejemplo, ¿qué pasa si al definir un elemento no hemos definido los anteriores?. Pues simplemente que los anteriores no existen. el número de elementos, es el que tiene, sin embargo para leer el elemento deberemos usar el número que le hemos dado, y no el que le correspondería por su orden.
Por ejemplo, si escribimos :
$a[5]="hola";
Creamos un array de un solo elemento, sin embargo para leerlo debemos escribir echo "$a[5]";, con el número 5, aunque sea el primer elemento del array.

Definir arrays asociativos
Para definir una array asociativo debemos definir para cada elemento tanto su valor como su clave. para ello utilizaremos el siguiente código:
$miarray=array("clave1"=>"valor1","clave2"=>"valor2" ... "claveN"=>"valorN");
Es decir para crear el array definimos cada elememento, el cual se compone de dos partes, una la clave, y otra el valor, escribimos el elemento de la siguiente manera "clave"=>"valor".
Veamos un ejemplo de aray asociativo.
$cap=array("España"=>"Madrid", "Francia"=>"París", "Inglaterra"=>"Londres", "Italia"=>"Roma", "Portugal"=>"Lisboa", "Alemania"=>"Berlín");
En este array los datos o valores guardados son algunas capitales europeas, mientras que la clave para acceder a ellas son los paises a los que pertenecen.

·         Tipos de Arrays

En una variable tenemos la posibilidad de almacerar una estructura de datos compleja; para ello podemos asignarle, en vez de un dato simple, otro más complejo conocido como array.

Estos arrays son datos capaces de albergar otros datos, y poder acceder a ellos a través de un índice.

En primer lugar tenemos los arrays más simples, los que solo pueden albergar datos simples y con un índice numérico (índice por defecto en PHP).

En segundo lugar tenemos los arrays asociativos, cuyo índice ya no es numérico, sinó que tendrá los valores que nosotros le demos.

Por último tenemos los arrays más complejos, que se hacen llamar arrays multidimensionales. Éstos, a su vez, pueden ser asociativos o no serlo.

Estos últimos son los que nos dan la posibilidad realmente de almacerar una estructura compleja de datos en una sola variable.
tipos de array

·         Funciones Útiles para el Uso de Arrays

un buen listado interesante de funciones para trabajar con arrays en PHP.

    array_change_key_case — Devuelve una matriz con todas las claves de las cadenas convertidas a mayúsculas o minúsculas
    array_chunk — Divide una matriz en segmentos
    array_combine — Crea una nueva matriz, usando una matriz para las claves y otra para sus valores
    array_count_values — Cuenta todos los valores de una matriz
    array_diff_assoc — Comprueba las diferencias entre matrices teniendo en cuenta los índices
    array_diff_key — Calcula la diferencia de matrices usando las llaves para la comparación
    array_diff_uassoc — Computa la diferencia entre matrices con un chequeo adicional de índices, el cual es realizado por una llamada de retorno entregada por el usuario
    array_diff_ukey — Calcula la diferencia de matrices usando callback function on the keys for comparison
    array_diff — Comprueba las diferencias entre matrices
    array_fill_keys — Fill an array with values, specifying keys
    array_fill — Llena una matriz con valores
    array_filter — Filtra elementos de una matriz mediante una función “callback”
    array_flip — Intercambia los valores de una matriz con sus índices
    array_intersect_assoc — Calcula la intersección de matrices verificando que también coincidan los índices
    array_intersect_key — Calcula la intersección de matrices usando las llaves para la comparación
    array_intersect_uassoc — Calcula la intersección de matrices con chequeo de índices adicional por una función de usuario
    array_intersect_ukey — Calcula la intersecció de matrices usando una función de usuario para la comparación de los índices
    array_intersect — Calcula la intersección de matrices
    array_key_exists — Comprueba si el índice o clave dada existe en la matriz
    array_keys — Devuelve todas las claves de una matriz
    array_map — Aplica la llamada de retorno especificada a los elementos de las matrices dadas
    array_merge_recursive — Une dos o más matrices recursivamente
    array_merge — Combina dos o más matrices
    array_multisort — Ordena múltiples matrices, o matrices multi-dimensionales
    array_pad — Rellena una matriz con un valor hasta el tamaño especificado
    array_pop — Extrae el último elemento de la matriz
    array_product — Calcula el producto de valores en una matriz
    array_push — Inserta uno o más elementos al final de la matriz
    array_rand — Selecciona una o más entradas aleatorias de una matriz
    array_reduce — Reduce iterativamente una matriz a un solo valor usando una función llamada de retorno
    array_reverse — Devuelve una matriz con los elementos en orden inverso
    array_search — Busca un valor determinado en una matriz y devuelve la clave correspondiente en caso de éxito
    array_shift — Extrae un elemento del comienzo de la matriz
    array_slice — Extrae una porción de la matriz
    array_splice — Suprime una porción de la matriz y la sustituye por otra cosa
    array_sum — Calcula la suma de los valores en una matriz
    array_udiff_assoc — Computa la diferencia entre matrices con un chequeo de índices adicional, comparando los datos con una llamada de retorno
    array_udiff_uassoc — Computa la diferencia entre matrices con un chequeo de índices adicional, comparando los datos y los índices con una llamada de retorno
    array_udiff — Computa la diferencia entre matrices, usando una llamada de retorno para la comparación de datos
    array_uintersect_assoc — Calcula la intersección de matrices con chequeo adicional de ídices, comparando los datos por una función del usuario
    array_uintersect_uassoc — Calcula la intersección de matrices con chequeo adicional de índices, compara los datos y los índices por una función del usuario
    array_uintersect — Calcula la interseccón de matrices, compara los datos con una función del usuario
    array_unique — Remueve valores duplicados de una matriz
    array_unshift — Introduce uno o más elementos al principio de la matriz
    array_values — Devuelve todos los valores de una matriz
    array_walk_recursive — Aplicar una función de usuario recursivamente a cada miembro de una matriz
    array_walk — Aplica una función del usuario a cada elemento de una matriz.
    array — Crear una matriz
    arsort — Ordena una matriz en orden inverso y mantiene la asociación de índices
    asort — Ordena una matriz y mantiene la asociación de índices
    compact — Crea una matriz que contiene variables y sus valores
    count — Cuenta los elementos de una matriz o propiedades de un objeto
    current — Devuelve el elemento actual de una matriz
    each — Devuelve el siguiente par clave/valor de una matriz y avanza el apuntador
    end — Mueve el puntero interno de una tabla al último elemento
    extract — Importa variables a la tabla de símbolos desde una matriz
    in_array — Revisa si un valor existe en una matriz
    key — Obtiene una clave de una matriz asociativa
    krsort — Ordena una matriz por clave en orden inverso
    ksort — Ordena una matriz por clave
    list — Asigna variables como si fueran una matriz
    natcasesort — Ordena una matriz usando un algoritmo de “orden natural” sin distinguir mayúsculas de minúsculas
    natsort — Ordena una matriz usando un algoritmo de “orden natural”
    next — Avanza el puntero interno de una matriz
    pos — Alias de current
    prev — Rebobina el puntero interno de una matriz
    range — Crea una matriz que contiene un rango de elementos
    reset — Fija el puntero interno de una matriz a su primer elemento
    rsort — Ordena una matriz en orden inverso
    shuffle — Mezcla una matriz
    sizeof — Alias of count
    sort — Ordena una matriz
    uasort — Ordena una matriz mediante una función de comparación definida por el usuario y mantiene la asociación de índices
    uksort — Ordena una matriz por claves mediante una función definida por el usuario
    usort — Ordena una matriz por sus valores usando una función de comparación definida por el usuario

No hay comentarios:

Publicar un comentario