4.- Matrices / For each

¿Qué son las matrices?

Hasta ahora todas las variables que hemos visto contenían un valor, por ejemplo:

$i = 5;

Cómo ya vimos al tratar las variables, una matriz es un tipo de variable que te permite almacenar múltiples valores. También verás referirse a ellas como “tablas” o arrays. Arrays es el término en inglés y a mí tablas no me acaba de gustar porque puede dar lugar a confusiones, me suena a HTML. Por ello utilizo el término matrices o arrays. Pero bueno que seáis que los tres términos son intercambiables.

Los arrays impresionan mucho al principio pero en realidad son una manera de guardar varios valores en una sola variable. Por ejemplo los días de la semana o los días del mes.

Supongamos que queremos guardar los días que tiene un fin de semana (viernes, sábado y domingo) con variables lo haríamos así

$dia1 = "Viernes";
$dia2 = "Sábado";
$dia3 = "Domingo";

Pero con un array, podríamos guardar los tres días en una sola variable que llamaremos $finde. Cada elemento de la variable tiene su propia “clave” que nos permite acceder al elemento concreto del grupo para poderlo usar. Esta clave puede ser bien una cadena de texto, bien números. Los arrays numeran automáticamente los elementos del grupo que lo forma (de 0 a N) de forma que siempre hay un elemento 0, elemento 1 elemento 2, elemento N.

Pero como veremos luego también podemos asignar un nombre a cada elemento del array para poder identificar cada elemento del grupo. De momento vamos a hacer un array simple y luego lo utilizaremos.

Para crear un array, utilizamos la función array():

$finde = array ("Viernes", "Sábado", "Domingo");

Así guardamos todos los días del fin de semana en una variable ($finde) que es un array y contiene nuestros días. Este array automáticamente asigna un número a cada elemento (recuerda el primero es cero).

Ahora podemos llamar a cada elemento del grupo por su número:

<html>
<head>
<title>arrays
</title>
<body>
<?php
$finde = array ("Viernes", "Sábado", "Domingo");
echo ("Me voy a cuenca el " . $finde[0] . ", tengo una boda el " . $finde[1] . ", volveré el " . $finde[2]);
?>
</body>
</html>

Hay otra manera de crear un array, incluso de añadir elementos al grupo ya existente, estableciendo cada elemento individualmente.

$finde[] = "Viernes";
$finde[] = "Sábado";
$finde[] = "Domingo";

Este código funciona exactamente igual que la función array(), numerando los elemementos desde [0]. Ahora supongamos que nos dan un día de fiesta, así que vamos a añadirlo a nuestro finde, da igual cómo hubieramos creado el el array podemos añadirle un elemento

$finde[] = “Lunes”;
PHP cuenta el número de elementos y le asigna al “Lunes” el siguiente que esté libre, que en este caso es [3].

Por lo que podríamos modificar nuestro ejemplo de la siguiente manera:

<html>
<head>
<title>arrays</title>
<body>
<?php
$finde = array ("Viernes", "Sábado", "Domingo");
echo ("Me voy a cuenca el " . $finde[0] . ", tengo una boda el " . $finde[1] . ", volveré el " . $finde[2]);
$finde[] = "Lunes";
echo ("<p>Claro que como el " . $finde[3] . " es fiesta, igual estoy fuera los 4 días: </p>");
$i = 0;
while ($i < 4) {
echo ( $finde[$i] . "<br />");
$i++;
}
?>
</body>
</html>

Con los arrays podemos hacer todo tipo de cosas, como incrementarlos por número, ordenarlos alfabéticamente, categorizarlos, etc.

Arrays Asociativos

Ahora vamos a ver algo un poco más complicado. Los arrays asociativos indexan los elementos utilizando claves en lugar de números, éstas claves son norbres que determinas tú. Para especificar un array asociativo, en la función array, especificamos pares de clave valor utilizando => : clave =>valor; como por ejemplo:

$perro = array (
nombre=>"Trozky",
raza=>"West Highland Terrier",
color=>"Blanco",
Edad=>10
);

Hemos creado cuatro claves: nombre,raza, color y edad, y a cada una de esas claves le hemos asignado un valor. Nombre es Trozky, raza es West Highland Terrier, color es blanco y edad es 10. Podemos recuperar cualquier valor utilizando la clave correspondiente, por ejemplo:

<?php
$perro = array (
nombre=>"Trozky",
raza=>"West Highland Terrier",
color=>"Blanco",
edad=>10
);
?>

<html>
<head><title>Arrays asociativos</title></head>
<body>
Tengo un perro muy simpático, es un <?php echo $perro[raza]; ?> de color <?php echo $perro[color]; ?>.
Se llama  <?php echo $perro[nombre]; ?> y tiene  <?php echo $perro[edad]; ?> años.
</body>
</html>

También podemos establecer las claves de forma individual,sin utilizarla función array.

$perro[nombre] = "Trozky";
$perro[raza] = "West highland Terrier";
$perro[color] = "blanco";
$perro[edad] = 10;

Arrays multidimensionales
Un array multidimensional es un array que está compuesto a su vez de arrays. Pongamos que vamos a hacer un array de ciudades. Para cada ciudad, haremos un array con el nombre, el país, el idioma de sus habitantes y el continente en el que está, así de paso igual aprendemos algo de geografía. Parra crear nuestra matriz multidimensional, primero creamos un array:

$ciudades = array ();

y ahora lo rellenamos con nuestros datos geográficos:


$ciudades = array (
array ( nombre=>"Madrid",
pais=>"España",
idioma=>"Español",
continente=>"Europa" ),
array ( nombre=>"París",
pais=>"Francia",
idioma=>"Francés",
continente=>"Europa" ),
array ( nombre=>"Lima",
pais=>"Perú",
idioma=>"Español",
continente=>"América" ),
array ( nombre=>"Sidney",
pais=>"Australia",
idioma=>"Inglés",
continente=>"Oceanía" )
);

Para extraer la información de los arrays multidimensionales, llamamos al array padre con el número que corresponda al array que queremos sacar y la clave que queremos. Por ejemplo, si queremos saber qué idioma se habla en Australia:

echo $ciudades[3][idioma];

El resultado sería “Inglés”.

Veamos un ejemplo del potencial que tiene esto.

<html>
<head>
<title>Ciudades</title>
</head>
<body>

<?php

$ciudades = array (
array ( nombre=>"Madrid",
pais=>"España",
idioma=>"Español",
continente=>"Europa" ),
array ( nombre=>"París",
pais=>"Francia",
idioma=>"Francés",
continente=>"Europa" ),
array ( nombre=>"Lima",
pais=>"Perú",
idioma=>"Español",
continente=>"América" ),
array ( nombre=>"Sidney",
pais=>"Australia",
idioma=>"Inglés",
continente=>"Oceanía" )
);

?>

<table width="80%" border="2" align="center" cellpadding="2" cellspacing="2">
<tr>
<th colspan="4">
Ciudades del Mundo
</th>
</tr>

<tr>
<th>Nombre
</th>

<th>Idioma
</th>

<th> País
</th>

<th> Continente
</th>
</tr>

<?php
for ($i=0; $i< count($ciudades); $i++)

{
?>
<tr>
<td align="center">
<?php echo $ciudades[$i][nombre];?>
</td>
<td align="center">
<?php echo $ciudades[$i][idioma];?>
</td>
<td align="center">
<?php echo $ciudades[$i][pais];?>
</td>
<td align="center">
<?php echo $ciudades[$i][continente];?>
</td>
</tr>

<?php
}
?>
</table>
</body>
</html>

Foreach
Prometimos explicar los bucles foreach al hablar de las matrices y aquí están. Foreach es un bucle pensado específicamente para los arrays. Veamos su sintaxis:

foreach ($array as $temp)
{
// hacer cosas
}

Traducido al castellano: coge cada elemento del array $array, ponlo en la variable $temp, y ejecuta las instrucciones que te damos entre llaves sobre la variable $temp.

Para ver como funciona vamos a re-escribir el código anterior utilizando un bucle foreach:

<!doctype html public "-//W3C//DTD HTML4.0 Transitional//EN">
<html>
<head>
<title> Ejemplo con arrays y foreach</title>
</head>
<body>

<?php

// definimos un array

$antes = array ("Lola Flores", "Juanito Valderama", "Dúo Dinámico", "Los Panchos");
$ahora = array ("Rosa", "David Bisbal", "Ketchup", "Bustamante");

?>

Antes eran otros tiempos, y las radios ponían todo el rato a:
<?php
foreach ($antes as $artista)
{
echo $artista;
echo (" ");
}
?><br />
Los tiempos han cambiado, y aunque en el fondo es lo mismo ahora nos abruman con:

<?php

foreach ($ahora as $artista)
{
echo $artista;
echo (" ");
}
?>
</body>
</html>


Arrays y formularios

Entre otras muchas cosas, los arrays pueden ser útiles para procesar formularios con php. Vamos a ver un ejemplo que demuestra cómo podemos utilizar un array para procesar checkboxes en un formulario html.

<html>
<head><title>Ejemplo de arrays y checkboxes</title></head>
<body>

<?php

// Comprobar si se ha enviado el formulario
if(!$submit)
{
// Mostramos el formulario si todavía no se ha enviado
?>

<h1>¿Quienes son tus casposos preferidos?</h1>
<form action="checkbox.php" method="GET">
<input type="checkbox" name="artista[]" value="Lola Flores"> Lola Flores
<input type="checkbox" name="artista[]" value="Juanito"> Juanito
<input type="checkbox" name="artista[]" value="Bisbal"> Bisbal
<input type="checkbox" name="artista[]" value="Bustamante"> Bustamante
<input type="checkbox" name="artista[]" value="Rosa"> Rosa
<input type="checkbox" name="artista[]" value="Lolita"> Lolita
<br>
<input type ="submit" name="submit" value="Seleccionar">
</form>

<?
}

// Si se ha enviado el formulario mostramos los artistas que se han seleccionado

else
{
?>

<b> Has elegido a los siguientes casposos:</b>

<br>

<?php

// Utilizamos un bucle for para mostrar los elementos del array
for($contar = 0; $contar < sizeof($artista); $contar++)
{
echo $artista[$contar]. "<br />";
}
}
?>

</body>
</html>

Al enviar el formulario, php crea automáticamente el array $artista y lo rellena con los elementos seleccionados. Resulta útil para agrupar datos relacionados de un formulario.

Se puede utilizar la misma técnica con objetos de selección múltiple:

<html>
<head> Array con selecciones múltiples</head>
<body>

<?php

// comprobamos si se ha enviado el formulario

if(!$submit)

{
// si no se ha enviado, mostramos el formulario

?>

<form action="casposos.php" method="POST">

<select name="artista[]" size=”6” multiple>
<option value="Lola Flores"> Lola Flores</option>
<option value="Juanito"> Juanito</option>
<option value="Bisbal"> Bisbal</option>
<option value="Bustamante"> Bustamante</option>
<option value="Rosa"> Rosa</option>
<option value="Lolita"> Lolita</option>
</select>

<br>

<input type="submit" name="submit" value="Seleccionar">
</form>

<?php
}
// Si se ha enviado elformulario, mostrar los artistas seleccionados

else {

?>
<b> Estos son tus casposos favoritos:</b><br />
<?php

// utilizamos un bucle for para mostrar los elementos:

for($contar=0; $contar < sizeof($artista); $contar++)

{
echo $artista[$contar];
echo (“<br />”);
}
}
?>
</body>
</html>

break y continue

En los bucles, hay dos conceptos importantes que tenemos que conocer: break y continue.

“break
” se utiliza para salir de un bucle si nos encontramos con una situación inesperada. Un buen ejemplo de ello es el error de dividir por cero. Cuando dividimos un número varias veces utilizando otro número que va decreciendo, es aconsejable comprobar el divisor y salir del bucle en cuanto sea igual a cero.

“continue”
se utiliza para saltarse una vuelta del bucle y seguir con la siguiente, veamos un ejemplo:


<?php
for($i = 1; $i<=10; $i++)
{
if($i == 7)
{
continue;
}
else
{
echo $i;
echo ("<br />");
}
}

?>

Php escriría en pantalla los números del 1 al 10, pero al llegar al número 7, “continue” hará que se lo salte y siga con el bucle. Por lo tanto, en pantalla no aparecerá el número 7.

Volver al índice

One response to “4.- Matrices / For each

  1. Pingback: Más sobre las matrices en PHP: tipos de arrays | Aprendiendo PHP

Leave a Reply

Please log in using one of these methods to post your comment:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s