Arrays asociativos en PHP: crear, editar, añadir, eliminar, extraer y eliminar elementos

Los arrays asociativos en PHP, son una de las herramientas más útiles para manejar información. A diferente de los arrays secuenciales, equivalentes a los vectores de C, el acceso no se hace al elemento iésimo, si no que lo hacemos a una clave, al estilo de las tablas hash.

Veamos un ejemplo con personas a las que se les referencia a través de su NIF. Como podéis imaginar, el acceso a través de ese dato es inmediato.

Creación

La creación es inmediata, nos limitamos a llamar a la función array seguida de los parámetros que serán sus elementos. Escribimos los elementos con esta forma: “clave” => “valor”.

 $personas = array('30303030A' => 'Javier Carazo', 
'31313131B' => 'Francisco Gil');

Añadir o editar elementos

Para añadir elementos no necesitaremos otra cosa que hacer una asignación, es decir, ni siquiera deberemos indicar que el elemento es nuevo. Será la misma operación la de añadir y la de editar.

Leer más » 5 Comentarios

Insertar elemento en un array con PHP: array_push contra $array[]=

Los array en PHP son un tipo de dato muy flexible, podemos usarlo como una matriz real, una lista (vector), un tabla hash, un diccionario, una colección, una pila, una cola… es decir, es realmente flexible.

Una de las enormes ventajas que tiene para el desarrollador de alto nivel, es que su carácter dinámico ofrece una enorme facilidad al insertar datos dentro del mismo. Sin embargo, tenemos dos métodos básicos para insertar datos, cada uno con sus ventajas e inconvenientes. Veámoslos.

$array[]=

Es la forma más básica y la más rápida, aunque tiene un problema, sólo permite añadir un sólo elemento en cada ocasión. Ejemplo de uso:

Leer más » 23 Comentarios

Indices negativos en un vector con PHP

En la mayoría de los lenguajes de programación de alto y bajo nivel, acceder a un elemento de un vector a través de un índice menor que cero implica acceder a una dirección de memoria que no hemos reservado, y en consecuencia almacenar en un lugar dónde no protegemos el contenido desde el mismo programa.

Para poder usar un índice negativo en el lenguaje C tendremos que declarar otro puntero auxiliar que acceda al espacio de memoria reservado por el anterior para que los menores que cero en ese rango sean equivalentes a sus análogos positivos. El código que ejemplifica este caso:

int a[10] = { /* lo inicializamos a lo que queramos */ };
int *b;
int i;
b = a + 10; /* aquí entra en juego el puntero auxiliar */
for (i = -10; i < 0; i++) {
int x = b[i];
}

Sencillo de entender, pero en PHP la cosa se simplifica con poder usarlo como si de un elemento ubicado en la zona positiva se tratase

Leer más » 3 Comentarios

Reservar memoria dinámica para una matriz en C

Acabamos de hablar hace nada de cómo reservar memoria para un vector unidimensional de forma dinámica con C. Hoy le toca el turno a las matrices o arrays bidimensionales. Los vectores se organizan de forma lineal, secuencial y con todos los elementos en posiciones correlativas en la memoria. Las matrices se almacenan en forma de vector de vectores.

Dimensiones fijas

Si es de dimensiones fijas (declarándolas como matriz[filas][columnas]), el vector de vectores se guardará también uno al lado del otro.

Por lo tanto, en una matriz del tipo:

a00a01a02
a10a11a12
a20a21a22

En memoria (en la que los elementos los direccionamos en una sola dirección) los tendríamos de la siguiente forma (en cada lenguaje este criterio cambia, en Fotran se almacena en forma de vector de columnas):

a00a01a02a10a11a12a20a21a22

Dimensiones variables

Sin embargo, en el caso de la memoria dinámica, las cosas cambian. El mecanismo será el siguiente:

  • Declararemos un doble puntero “matriz” sobre el que reservaremos memoria para tantas filas tengamos.
  • Recorreremos el vector recién creado para reservar memoria para las columnas de cada fila.

Hay dos detalles a tener en cuenta:

  • La variable “matriz” será del tipo doble puntero ya que hará referencia a un vector de punteros.
  • Cada fila sí estará almacenada de forma consecutiva en memoria, pero éstas a su vez no estarán de forma obligada juntas, aunque podremos seguir accediendo de la misma forma.

Veamos un ejemplo con código real (no hace comprobaciones de que el malloc se ejecute correctamente):

#include <stdlib.h> #include <stdio.h> int main(void) { int filas = 2; int columnas = 3; int **x; int i; // Recorre filas int j; // Recorre columnas // Reserva de Memoria x = (int **)malloc(filas*sizeof(int*)); for (i=0;i<filas;i++) x[i] = (int*)malloc(columnas*sizeof(int)); // Damos Valores a la Matriz x[0][0] = 1; x[0][1] = 2; x[0][2] = 3; x[1][0] = 4; x[1][1] = 5; x[1][2] = 6; // Dibujamos la Matriz en pantalla for (i=0; i<filas; i++) { printf("\n"); for (j=0; j<columnas; j++) printf("\t%d", x[i][j] ); } return 0; } read more

Leer más » 16 Comentarios

Reservar memoria dinámica para un vector en C

Puesto que estamos hablando bastante de C en el curso de programación de videojuegos con SDL, voy a publicar una serie de pequeños apuntes sobre programación en C que seguro que os son de utilidad. No van a constituir un curso como tal pero serán una serie de entradas relacionadas sobre este tema. read more

Leer más » 8 Comentarios

Ordenar arrays asociativos en PHP: diferencia entre ksort y asort

Los arrays asociativos son estructuras de datos que PHP nos ofrece para poder almacenar datos asociados a una serie de claves, en lugar de a un índice numérico. En otros lenguajes, se les denomina tablas hash.

La ordenación de dichos arrays, es una de las operaciones básicas de cara a un correcto manejo de los mismos. Para poder llevar a cabo esa operación, PHP nos ofrece dos funciones: asort y ksort que vamos a explicar en esta entrada. Este tipo de array se utiliza muy a menudo al hacer consultas contra bases de datos, con funciones como mysql_fetch_array. read more

Leer más » 2 Comentarios