Trabajo con tablas o arrays en PHP

  • Por
Vemos algunas de las funciones típicas del trabajo con arrays a través de una pequeña explicación y un código de ejemplo de uso.

En el artículo anterior, sobre Arrays en PHP, explicamos cómo era la sintaxis para la creación de este tipo de estructuras de datos en PHP. Ahora que ya sabes cómo crear arrays, tanto con índices numéricos como con índices asociativos, vamos a ver varios ejemplos de trabajo en PHP que ilustrarán un poco el funcionamiento de algunas de las funciones de arrays (arreglos, vectores, matrices o tablas en castellano).

Este artículo además te servirá para conocer y aprender a usar algunas de las funciones más útiles que trae consigo PHP para el trabajo y manipulación de arrays. Tenemos que advertir que, si estás comenzando con PHP leyendo el Manual de PHP de DesarrolloWeb.com, algunos de los ejemplos verás que tienen código con elementos del lenguaje que no hemos tocado todavía, como las estructuras de control para hacer bucles con los que recorrer los elementos de un arreglo. Esperamos que no te despiste. Recuerda que más adelante en este manual podrás encontrar explicaciones sobre todo ello. Dicho eso, vamos sin más a introducirnos en materia con varios ejemplos interesantes.

Los ejemplos que podrás encontrar están divididos en dos secciones, aumentar el número de posiciones de un array o reducir el número de casillas disponibles.

Reducir el tamaño de un array

Con las siguientes funciones consigues quitar elementos en un array. Veremos cómo retirar casillas de arrays de tres maneras distintas, pero recuerda que tienes muchas más alternativas si lees la documentación de funciones para trabajo con Arrays.

array_slice()

Para disminuir el número de casillas de un arreglo tenemos varias funciones. Entre ellas, array_slice() la utilizamos cuando queremos recortar algunas casillas del arreglo, sabiendo los índices de las casillas que deseamos conservar.

Recibe tres parámetros. El array, el índice del primer elemento y el número de elementos a tomar, siendo este último parámetro opcional.

En el ejemplo siguiente tenemos un array con cuatro nombres propios. En la primera ejecución de array_slice() estamos indicando que deseamos tomar todos los elementos desde el índice 0 (el principio) hasta un número total de 3 elementos.

El segundo array_slice() indica que se tomen todos los elementos a partir del índice 1 (segunda casilla).

<?php
$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//modifico el tamaño
$salida = array_slice ($entrada, 0, 3);
//muestro el array
foreach ($salida as $actual)
   	echo $actual . "<br>";

echo "<p>";
//modifico otra vez
$salida = array_slice ($salida, 1);

//muestro el array
foreach ($salida as $actual)
   	echo $actual . "<br>";

?>

Tendrá como salida:

Miguel
Pepe
Juan

Pepe
Juan

array_shift()

Esta función extrae el el primer elemento del array y lo devuelve. Además, acorta la longitud del array eliminando el elemento que estaba en la primera casilla. Siempre hace lo mismo, por tanto, no recibirá más que el array al que se desea eliminar la primera posición.

En el código siguiente se tiene el mismo vector con nombres propios y se ejecuta dos veces la función array_shift() eliminando un elemento en cada ocasión. Se imprimen los valores que devuelve la función y los elementos del array resultante de eliminar la primera casilla.

<?php
$entrada = array ("Miguel", "Pepe", "Juan", "Julio", "Pablo");

//quito la primera casilla
$salida = array_shift ($entrada);
//muestro el array
echo "La función devuelve: " . $salida . "<br>";
foreach ($entrada as $actual)
   	echo $actual . "<br>";
echo "<p>";

//quito la primera casilla, que ahora sería la segunda del array original
$salida = array_shift ($entrada);
echo "La función devuelve: " . $salida . "<br>";
//muestro el array
foreach ($entrada as $actual)
   	echo $actual . "<br>";
?>

Da como resultado:

La función devuelve: Miguel
Pepe
Juan
Julio
Pablo

La función devuelve: Pepe
Juan
Julio
Pablo

unset()

Se utiliza para destruir una variable dada. En el caso de los arreglos, se puede utilizar para eliminar una casilla de un array asociativo (los que no tienen índices numéricos sino que su índice es una cadena de caracteres).

Veamos el siguiente código para conocer cómo definir un array asociativo y eliminar luego una de sus casillas.

<?php
$estadios_futbol = array("Barcelona"=> "Nou Camp","Real Madrid" => "Santiago Bernabeu","Valencia" => "Mestalla","Real Sociedad" => "Anoeta");

//mostramos los estadios
foreach ($estadios_futbol as $indice=>$actual)
   	echo $indice . " -- " . $actual . "<br>";

echo "<p>";

//eliminamos el estadio asociado al real madrid
unset ($estadios_futbol["Real Madrid"]);

//mostramos los estadios otra vez
foreach ($estadios_futbol as $indice=>$actual)
   	echo $indice . " -- " . $actual . "<br>";
?>

La salida será la siguiente:

Barcelona -- Nou Camp
Real Madrid -- Santiago Bernabeu
Valencia -- Mestalla
Real Sociedad -- Anoeta

Barcelona -- Nou Camp
Valencia -- Mestalla
Real Sociedad -- Anoeta

Aumentar el tamaño de un array

Tenemos también a nuestra disposición varias funciones que nos pueden ayudar a aumentar el número de casillas de un arreglo.

array_push()

Inserta al final del array una serie de casillas que se le indiquen por parámetro. Por tanto, el número de casillas del array aumentará en tantos elementos como se hayan indicado en el parámetro de la función. Devuelve el número de casillas del array resultante.

Veamos este código donde se crea un arreglo y se añaden luego tres nuevos valores.

<?php
$tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");

//aumentamos el tamaño del array
array_push($tabla, "Gorrión", "Paloma", "Oso");

foreach ($tabla as $actual)
   	echo $actual . "<br>";
?>

Da como resultado esta salida:

Lagartija
Araña
Perro
Gato
Ratón
Gorrión
Paloma
Oso

array_merge()

Ahora vamos a ver cómo unir dos arrays utilizando la función array_merge(). A ésta se le pasan dos o más arrays por parámetro y devuelve un arreglo con todos los campos de los vectores pasados.

En este código de ejemplo creamos tres arrays y luego los unimos con la función array_merge()

<?php
$tabla = array ("Lagartija", "Araña", "Perro", "Gato", "Ratón");
$tabla2 = array ("12","34","45","52","12");
$tabla3 = array ("Sauce","Pino","Naranjo","Chopo","Perro","34");


//aumentamos el tamaño del array
$resultado = array_merge($tabla, $tabla2, $tabla3);

foreach ($resultado as $actual)
   	echo $actual . "<br>";
?>

Da como resultado:

Lagartija
Araña
Perro
Gato
Ratón
12
34
45
52
12
Sauce
Pino
Naranjo
Chopo
Perro
34

Una última cosa. También pueden introducirse nuevas casillas en un arreglo por los métodos habituales de asignar las nuevas posiciones en el array a las casillas que necesitemos.

En arrays normales se haría así:

$tabla = array ("Sauce","Pino","Naranjo");
$tabla[3]="Algarrobo";

En arrays asociativos:

$estadios_futbol = array("Valencia" => "Mestalla","Real Sociedad" => "Anoeta");
$estadios_futbol["Barcelona"]= "Nou Camp";

Veremos más adelante otras posibilidades del trabajo con arrays.

Referencia:en el taller de PHP tenemos artículos sobre el trabajo con arrays en PHP. Entre otros encontrarás uno que trata un tema de frecuente consulta: los distintos tipos de ordenación de arrays en PHP: Ordenar arrays con PHP

Autor

Miguel Angel Alvarez

Miguel es fundador de DesarrolloWeb.com y la plataforma de formación online EscuelaIT. Comenzó en el mundo del desarrollo web en el año 1997, transformando su hobby en su trabajo.

Compartir

Comentarios

Jorge

29/5/2004
Hola! He intentado sumar dos arrays con el método array_merge(), pero los que son iguales se repiten. Entonces, me puse a investigar como se podria sumar dos arrays y en el caso de ser iguales, poder sumar sus valores. El código que he creado es así:
<?
$tabla = array ("Tomates" => "3", "Patatas" => "8", "Harina" => "100", "Truchas" => "13", "Agua" => "8");
$tabla2 = array ("Perjil" => "12","Tomates" => "34","Sardinas" => "45");
//aumentamos el tamaño del array
$result = array_merge ($tabla, $tabla2);
foreach($tabla as $k => $v){
if (array_key_exists($k, $tabla2)) {
foreach($tabla as $k2 => $v2)
{
if ($k == $k2){
$v = $v + $v2;
echo 'Ingrediente:<br> '.$k.' ud: '.$v. ' <br>';
echo 'Ingrediente:<br> '.$k2.' ud: '.$v2. ' <br>';
}
}
}else{
foreach($result as $k3 => $v3){
echo 'Ingrediente:<br> '.$k3.' ud: '.$v3. ' <br>';
}
}

en este codigo intento sumar $tabla y $tabla2. Si existe algún ingrediente (en este caso, tomates) se suman las cantidades. Por lo visto da un error algo debo haber hecho mal, si alguien puede decirme el qué, le estaría agradecido. aún asi espero que sirva de algo.
Por último felicitar a los creadores de esta web por lo mucho que he aprendido de ella.

Dani

19/6/2004
Disculpa mi ignorancia, pero es que me he leído casi todo en manual de PHP pero todavía no he descubierto donde debo insertar las secuencias (los códigos de PHP) para añadir campos, qitar elementos, es decir, modificar una tabla dentro de una base de datos.
¿cómo se enlaza ese código con la base de datos?

Espero que haya entendido mi duda. Gracias. Ch@o.

Perceval

29/10/2008
Me gusto el articulo, lo que si es que el ultimo ejemplo de modificaciones de registros asociativos, creo que tiene un error, Modifica sobre un campo no existente, dice ["Barcelona"], cuando nunca se creo en la definicion del array.

Jp

06/12/2008
Para Perceval:

Lo que hace en las últimas líneas es agregar un nuevo key y valor a un Array, es como "forzar" al array a agregar otro elemento.

eli

07/12/2008
si, es asi como dice Jp, se agrega un nuevo elemento al array con el indice "barcelona" (como si fuera la siguiente posicion del array), y el valor es "nou camp"...

...asi que el array fue creado inicialmente con 3 elementos, y de esa forma agregamos uno mas :)

Carlitos

04/3/2009
Para Jorge,
soy novato en PHP pero no en programación y creo que un error es tu segundo "foreach", el que está anidado dentro del primero, debería poner "tabla2" en lugar de "tabla" para poder hacer la comparación en la segunada tabla.
Saludos

andres2088

09/10/2009
Felisitaciones
Muy buen manual, en mi instituto no enseñan php solamente html, una verdadera lastima, por lo que ustedes han sido una salvacion, ya que se que php es muy importante. Me gustarian mas videotutoriales, son muy buenos los que estan, y es mas facil comprender todo.

Muchas Gracias

jaleman

13/12/2009
solucion al problema de arreglos
para: jorge

primero que nada hay un error en el segundo foreach, deberias de recorrer la $tabla2 de esta manera se puede hacer la suma de los valores de las claves que sean iguales, hasta ahi todo va bien, pero despues tienes un problema con el arreglo $result ya que la funcion array_merge solo une las dos matrices, y lo que se necesita es otra funcion que manipule los dos arreglos para el resultado que quieres hacer, aqui les mando una solucion sencilla:
<?
$tabla = array ("Tomates" => "3", "Patatas" => "8", "Harina" => "100", "Truchas" => "13", "Agua" => "8");
$tabla2 = array ("Perjil" => "12","Tomates" => "34","Sardinas" => "45","Patatas"=>"10");
echo"<br>";

/*recorremos $tabla y verificamos si alguna clave de $tabla existe en $tabla2
si es true se recorre $tabla2*/

foreach($tabla as $k => $v1){
if (array_key_exists($k, $tabla2)) {
foreach($tabla2 as $k2 => $v2)
{
//realizamos la operacion de sumar los valores de las claves iguales
if($k==$k2){
$v1 = $v1 + $v2;

//mandamos a imprimir
echo 'Ingrediente: '.$k2.' ud: '.$v1. ' <br>';
}
}
}
}

//tomo los elementos de $tabla que no estan en $tabla2 y lo asigno a una variable
$a= array_diff_key($tabla, $tabla2);

//recorremos la nueva variable que se ha convertido en un nuevo array
foreach($a as $b=>$c){
//mandamos a imprimir sus claves con sus valores
echo 'Ingrediente: '.$b.' ud: ' .$c. '<br>';
}

//tomo los elementos de $tabla2 que no estan presentes en $tabla y los muestro
$j= array_diff_key($tabla2, $tabla);
foreach($j as $b=> $c){
echo 'Ingrediente: '.$b.' ud: '.$c. ' <br>';
}

?>

eric

17/5/2010
hola tengo una problema con un ejercicio de php
primera ejercicio es esta
-----------
Realizar un programa que lea dos números enteros y muestre en la pantalla todos los números comprendidos entre estos números, ambos incluidos. El programa no debe suponer que el primero sea menor que el segundo, ni viceversa, pero sí que deberá tenerlo en cuenta para mostrar los números en orden creciente o decrecient según corresponda.
-----------
i la otra ejercicio és
-----------
Realizar un programa que lea 20 números (entre el uno y el 10) y muestre aquél o
aquellos que han aparecido más veces.
-----------
i la ultima que es este
-----------
Realizar un programa que implemente una función que al pasarle una letra que indique si queremos área de un cuadrado o un triángulo y luego le pasamos datos entonces calcule lo que toque y devuelva el resultado.

jc*ferbuzon

21/9/2010
urgente
hola
tengo una tabla de 4 columnas y filas donde consta docente, materias; etc por cada materias se crean un combo con los docentes necesito seleccionar varios docentes y varias materias y guardar en una BD; tengo entendido que me tocaria de hacer con un arreglo pero no se si alguien me puede ayudar todo esto tengo que hacerlo en php gracias

victor

26/10/2010
pregunta
nesesito agregar una tabla con las columnas y filas de acuerdo a los datos ingresados, en este caso necesito poner el nombre de las materias y dependiendo del numero que aparesca la tabla con los respectivos nombres

Claudia

26/5/2011
arreglos
hola estoy en segundo año de Análisis de sistemas.. y no entiendo muchas cosas...se los agradeceria si es que me pueden ayudar.sobre arreglos,cargar en un arrays 10 numeros mostrar cuales son positivos y negativos por ejemplo.

Cromox

29/2/2012
no recuerdo las etiquetas html
Disculpen mi ignorancia simplemente hace mucho no toco nada y no recuerdo
<BR> para que era?
y
<P> que hace?
el $actual supongo es una variable que define ahi mismo pero me lei la guia del forech pero esta linea: foreach ($salida as $actual)
significa que va desde la 1 hasta la ultima del array?
gracias y disculpen mi ignorancia..