Actualizado el 14-01-2007
versión para imprimir

¿Que es un array?

Un array (o matriz, como tambien son llamados) es un tipo de variable, con la singularidad de que no contiene un único valor, sino un conjunto de valores referenciados con un índice. Aunque al principio puedan parecer poco amistosos, su uso es utilisimo e imprescindible, y de hecho puedes encontrarlos en todos los lenguajes de programación.

La sintaxis es muy parecida a la usada con el resto de variables, con diferencias en la forma en que el array es creado y lógicamente, la forma en que su valor es recuperado (pues teniendo un valor múltiple, tenemos que indicar que valor, o en que forma, deseamos que nos sea devuelto).

Creando arrays

Hay dos formas de crear arrays, estatica o dinamicamente

Podemos crear arrays de forma estática usando la construcción php array() con la siguiente sintaxis:

Array array([index]=>[valor], [index2]=>[valor], ...);

teniendo en cuenta que podemos asignar manualmente el indice (mas tarde volveremos sobre esto) o dejar que php lo haga por nosotros.

Supongamos por ejemplo que necesitamos almacenar nombres de ciudades. Podriamos usar variables simples ($ciudad1="madrid"; y asi sucesivamente), o podemos declarar un array:


<?php

  $mis_ciudades 
= array(
        
0=>"madrid",
        
1=>"barcelona",
        
2=>"zaragoza");
?>

obteniendo un array con una lista indexada de nuestras ciudades. Sabemos que el primer valor corresponde al índice cero, el segundo al uno, y asi sucesivamente (por convención, el primer valor de un array corresponde siempre -por defecto- al valor cero).

A partir de ahora podemos recuperar cualquier valor específico refiriendonos a su índice. Por ejemplo para presentar el nombre de la segunda ciudad podriamos escribir simplemente


<?php 
echo $mis_ciudades[1]; 
?>


como hariamos con cualquier otra variable.

Y tambien podemos crear arrays dinámicamente, sencillamente agregando nuevos valores. Por ejemplo,


<?php
$mis_ciudades
[3] = "valencia";
?>


agregandose el valor al array. Naturalmente por este mismo sistema tambien podemos modificar el valor de un array dado, e incluso añadir valores sin asignar indice, que será agregado automáticamente por php:
<?php
$mis_ciudades
[] = "zamora";
?>

de tal forma que podemos acceder a este valor utilizando $mis_ciudades[4]

arrays asociativos

Como ya sabemos, un array sencillo esta formado por conjuntos de parejas indice => valor, o como suele expresarse en inglés, key, value. Hasta ahora hemos manejado un ejemplo con indices o keys numericos (tamben comocidos como arrays escalares), pero tambien podemos usar strings como indices, es decir, cadenas de texto. Este tipo de array es el array asociativo:


<?php

  $mis_ciudades 
= array(
        
"madrid"=>"madrid",
        
"cataluña"=>"barcelona",
        
"aragon"=>"zaragoza");
?>

las ventajas son evidentes: imagina por ejemplo un array agenda construido a base de parejas email =>tu email, telefono => tu telefono etc. O por ejemplo para construir menus de páginas web. Sin ir mas lejos los menus que puedes ver en este manual estan construidos a base de llamadas a distintos arrays:


<?php

$temas_disp 
= array(
"index.php"=>"Introducción al ftp",
"comandos.php"=>"Comandos básicos",
"chmod.php"=>"CHMOD, asignando permisos",
"comandosftp.php"=>"Comandos ftp"
);
?>

arrays Multidimensionales

Un array multidimensional es simplemente un array en el que al menos uno de sus valores es, a su vez, un array:


<?php

 
  $agenda 
= array("domicilio" => "calle tal cual",
                  
"telefono"  => $telefonos,
                  
"trabajo"   => "empresa tal cual");
  
  
$telefonos = array("trabajo" => "7296489",
                     
"casa"    => "5689524",
                     
"movil"   => "9558987");

 
?>


Y podemos acceder a dichos valores añadiendo un par de corchetes:


<?php
 $agenda
['telefono']['casa'] = "5689524";
?>

arrays hasta en la sopa

Te gusten o no, si deseas usar php, deberás familiarizarte con los arrays. Si deseas recuperar datos de una base de datos, obtienes un array. Si dispones un conjunto de formularios, las variables pueden manejarse en forma de array; a los autores de PHP los arrays les encantan. Como final de esta introducción a los arrays vamos a ver que se puede hacer con algunos de los arrays predefinidos. Y sin duda, uno de los mas útiles es $_SERVER. Se trata de un array predefinido (no tienes que crearlo) y de alcance global es decir, que puedes acceder al mismo desde cualquier parte de tu script. $_SERVER contiene información facilitada por el servidor (headers, rutas, ip, http referes etc). Como los valores del array son suministrados por el servidor, no hay garantias de que cada servidor facilite todos los valores, y algunos no son especialmente fiables. No obstante, es una de las construcciones mas usadas.

Recuperando todo el contenido

una de las funciones mas utiles es print_r, que simplemente, nos devuelve de forma legible información acerca de una variable o array.
Su sintaxis?:

<pre>



<?php
print_r 
($_SERVER);
?>
</pre>

Y este es el resultado.

Si lo que deseamos es un volcado en pantalla de forma mas flexible, hemos de hacer un loop, es decir, ir llamando valores sucesivamente hasta extraerlos todos.

Hay varias formas de hacer esto, la mas directa es foreach():

primera forma: foreach(expresion_array as $value) sentencia

Por ejemplo

<?php
foreach( $_SERVER as $value ) {
   echo 
"Valor: $value<br>\n";
}
?>


Segunda forma: foreach(expresion_array as $key => $value) sentencia:

<?php


foreach($_SERVER as $key => $value
{
echo 
"<b>".$key ."</b> tiene el valor de "$value ."<br>"
}

?>

Ahora comprenderás como en muchas páginas pueden decirte tu ip -38.107.191.101- o la página que acabas de visitar , sencillamente extrayendo valores de un array: $_SERVER['HTTP_REFERER']; y $_SERVER['HTTP_CLIENT_IP'];.

Nota sobre la detección de ips

Si un buen dia ves que un script te devuelve una ip que no es la tuya, posiblemente el problema sea que estes accediendo a la pagina a traves de una redirección, normalmente un servidor cache de tu proveedor. En estos casos $_SERVER[REMOTE_ADDR]; no te sirve, ya que devuelve la ip del server intermedio.

Sin embargo en estos casos, el array $_SERVER almacena un par de valores mas: HTTP_X_FORWARDED_FOR y HTTP_CLIENT_IP, cualquiera de los dos posiblemente te dará la ip que te interese.

Entonces, en lugar de usar $_SERVER[REMOTE_ADDR]; una solución mas segura es:

<?php
if (getenv("HTTP_X_FORWARDED_FOR")) {
     
$ip   getenv("HTTP_X_FORWARDED_FOR");
   } else {
     
$ip   getenv("REMOTE_ADDR");
  }
?>


es decir, si existe HTTP_X_FORWARDED_FOR usamos ese valor; si no existe, es que podemos usar REMOTE_ADDR;

Ejemplo:

el valor actual REMOTE_ADDR; es 38.107.191.101
el valor actual (si hay) de HTTP_X_FORWARDED_FOR; es

This site powered by Phorum.