sábado, 19 de diciembre de 2009

Array's, Arreglos o Matrices en PHP

Un array (o matriz, como también 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, estática o dinamicamente

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

Código
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. Podríamos usar variables simples ($ciudad1="Madrid"; y así sucesivamente), o odemos declarar un array:
Código
<?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 casi 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 refiriéndonos a su índice. Por ejemplo para
presentar el nombre de la segunda ciudad podríamos escribir simplemente
Código
<?php 
echo $mis_ciudades[1]; 
?>

Como haríamos con cualquier otra variable.

Y también podemos crear arrays dinámicamente, sencillamente agregando nuevos valores. Por ejemplo,
Código
<?php
$mis_ciudades[3] = "valencia";
?>

Agregándose  valor al array. Naturalmente por este mismo sistema también podemos modificar el valor de un array dado, e incluso añadir valores sin asignar indice, que será agregado automáticamente por php:

Código
<?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 numéricos (también conocidos como arrays escalares), pero también podemos usar strings como indices, es decir, cadenas de texto. Este tipo de array es el array asociativo:

Código
<?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, teléfono => tu teléfono etc. O por ejemplo para construir menús de páginas web.
Código
<?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:

Código
<?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:
Código
<?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?:

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

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

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

Segunda
forma: foreach(expresion_array as $key => $value)
sentencia:
Código
<?php
foreach($_SERVER as $key => $value) 
{
echo "<b>".$key ."</b> tiene el valor de ". $value ."<br>"; 
}
?>

Nota sobre la detección de ips
Si un buen día ves que un script te devuelve una ip que no es la tuya, posiblemente el problema sea que estes accediendo a la pagina a través 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:
Código
<?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:
Citar
el valor actual REMOTE_ADDR; es
83.38.202.159
el valor actual (si hay) de
HTTP_X_FORWARDED_FOR; es

Cadenas tratadas como arrays
Código
<?php
$cadena = "Xanders";
echo"El nombre $cadena separado por arrays quedaria asi:";
echo"<hr>";
echo $cadena[0];  // imprime X
echo"<br>";
echo $cadena[1];  // imprime a
echo"<br>";
echo $cadena[2];  // imprime n
echo"<br>";
echo $cadena[3];  // imprime d
echo"<br>";
echo $cadena[4];  // imprime e
echo"<br>";
echo $cadena[5];  // imprime r
echo"<br>";
echo $cadena[6];  // imprime s
?>

No hay comentarios:

Publicar un comentario