AnteriorPosterior

6. Arrays

  Curso: Introducción a PHP

6. Arrays

En los lenguajes "fuertemente tipados", como C, C++, php y C#, cada variable se declara con un tipo de datos asociado, y no se puede cambiar de tipo de datos.

En estos casos, un "array" es un conjunto de datos, todos ellos del mismo tipo, que se almacenan juntos y a los que se accede usando el mismo nombre de variable pero especificando la posición concreta en que está el dato individual que nos interesa.

En PHP, los tipos de datos asociados a las variables son mucho menos estrictos, porque se deducen del contexto y pueden cambiar. Por eso, los arrays también van a ser algo mucho más amplio que en un lenguaje de programación convencional.

Vamos a comenzar con un primer ejemplo que manipule números prefijados en un array:

<html>
<body>
<?php
// arrays01.php - array con datos prefijados
 
$datos = array(20, 41, 36, 12.8, 26);
echo "Mostrando los datos con for: ";
for ($i=0; $i<5; $i++)
    echo $datos[$i] , " - ";
echo "<br />";
echo "Mostrando con print_r: ";
print_r($datos);
echo "<br />";    
?>
</body>
</html>

Este ejemplo mostraría:

Mostrando los datos con for: 20 - 41 - 36 - 12.8 - 26 -
Mostrando con print_r: Array ( [0] => 20 [1] => 41 [2] => 36 [3] => 12.8 [4] => 26 )

"print_r" muestra todo el contenido del array en un formato legible. La alternativa "tradicional" es recorrer todo el array usando "for" o bien otra construcción que veremos un poco más adelante.

Ejercicio propuesto 6.1: Crea un programa que contenga 10 datos numéricos prefijados. Calcula la media de esos números y luego muestra los datos que están por encima de la media.


Pero un array en PHP puede contener datos de distintos tipos:

<html>
<body>
<?php
// arrays02.php - array con datos prefijados de distinto tipo
 
$datos = array(20, 41, "Ejemplo", 12.8, "Otro ejemplo");
echo "Mostrando los datos con for: ";
for ($i=0; $i<5; $i++)
    echo $datos[$i] , " - ";
echo "<br />";
echo "Mostrando con print_r: ";
print_r($datos);
echo "<br />";    
?>
</body>
</html>

que haría:

Mostrando los datos con for: 20 - 41 - Ejemplo - 12.8 - Otro ejemplo -
Mostrando con print_r: Array ( [0] => 20 [1] => 41 [2] => Ejemplo [3] => 12.8 [4] => Otro ejemplo )

Ejercicio propuesto 6.2: Crea un array que contenga los nombres de los meses y otros con los nombres de los días de la semana. Muestra el nombre del día y el nombre del mes que correspondan al número de día y número de mes que introduzca el usuario en un formulario.

Podemos incluso hacer que los índices no sean consecutivos, sino que vayan en cualquier orden, pero en este caso ya no podremos usar "for" para recorrerlos. En su lugar, usaremos "foreach", que permite extraer cada uno de los datos, dándole un nuevo nombre:

<?php
// arrays03.php - índices no consecutivos
 
$datos = array(5=>20, 0=>41, 7=>"Ejemplo", 3=>12.8, "Otro ejemplo");
echo "El dato 0 es $datos[0]<br />";
echo "Mostrando con print_r: ";
print_r($datos);
echo "<br />Mostrando los datos con foreach: ";
foreach ($datos as $unDato)
    echo $unDato , " - ";
echo "<br />";
?>

que tendría como resultado:

El dato 0 es 41
Mostrando con print_r: Array ( [5] => 20 [0] => 41 [7] => Ejemplo [3] => 12.8 [8] => Otro ejemplo )
Mostrando los datos con foreach: 20 - 41 - Ejemplo - 12.8 - Otro ejemplo -

También podemos usar textos como índice, añadir valores en cualquier momento, borrarlos con "unset" y comprobar si existen con "isset". Para saber el tamaño (cantidad de datos), usaremos "count". Para añadir al final, dejaremos los corchetes vacíos. Y podemos usar "foreach" para extraer tanto el índice como el valor, así:

<?php 
// arrays04.php - texto como índices, añadir, borrar... 
$datos = array(5=>20, "hola"=>41, 7=>"Ejemplo", 3=>12.8, "Otro ejemplo"); 
echo "Datos iniciales: "; 
print_r($datos); 
echo "<br /><br />Añadimos el dato 2 y el dato \"yo\": "; 
$datos[2] = 23; 
$datos["yo"] = 32; 
print_r($datos); 
echo "<br /><br />Añadimos un dato al final: "; 
$datos[] = 45; 
print_r($datos); 
echo "<br /><br />Borramos un dato: "; 
unset($datos["hola"]); 
if (! isset($datos["hola"])) 
    echo "\"hola\" se ha borrado "; 
print_r($datos); 
echo "<br /><br />Mostrando los datos con foreach: "; 
foreach ($datos as $clave => $valor) 
    echo $clave, "=", $valor , " - "; 
echo "<br /><br />Cantidad de datos: ", count($datos);     
echo "<br />"; 
?>

que nos respondería:

Datos iniciales: Array ( [5] => 20 [hola] => 41 [7] => Ejemplo [3] => 12.8 [8] => Otro ejemplo )

Añadimos el dato 2 y el dato "yo": Array ( [5] => 20 [hola] => 41 [7] => Ejemplo [3] => 12.8 [8] => Otro ejemplo [2] => 23 [yo] => 32 )

Añadimos un dato al final: Array ( [5] => 20 [hola] => 41 [7] => Ejemplo [3] => 12.8 [8] => Otro ejemplo [2] => 23 [yo] => 32 [9] => 45 )

Borramos un dato: "hola" se ha borrado Array ( [5] => 20 [7] => Ejemplo [3] => 12.8 [8] => Otro ejemplo [2] => 23 [yo] => 32 [9] => 45 )

Mostrando los datos con foreach: 5=20 - 7=Ejemplo - 3=12.8 - 8=Otro ejemplo - 2=23 - yo=32 - 9=45 -

Cantidad de datos: 7

Ejercicio propuesto 6.3: Crea un array que contenga textos en español como índice y textos en inglés como valor, de modo que se pueda usar para traducir los nombres de los números (del 1 al 10) de español a inglés (por ejemplo, a "uno" le corresponderá "one"). A partir de un formulario en el que el usuario introduzca una palabra, se le dirá su traducción o "word not found", según proceda.

Y hemos manejado otros arrays existentes en PHP anteriormente: $_GET para los datos de formularios que se pasen de forma visible, $_POST para los datos de formularios pasados de forma invisible y $_SERVER para saber cierta información sobre el servidor, como por ejemplo:

  • $_SERVER["PHP_SELF"] es el nombre de la página actual (incluyendo la ruta pero no el servidor).
  • $_SERVER["REMOTE_ADDR"] es la dirección IP desde la que se ha consultado la página.
  • $_SERVER["HTTP_USER_AGENT"] es el "agente" desde el que se ha pedido la página. Típicamente será un navegador web, y este texto contendrá detalles como el nombre del navegador, la versión y el sistema operativo anfitrión.

Ejercicio propuesto 6.4: Crea una página que diga al usuario desde qué IP está conectando. Si el navegador es Internet Explorer, deberá avisarle "Quizá su navegador no muestre correctamente esta página".

Actualizado el: 09-12-2013 23:32

AnteriorPosterior