Ir al contenido

Programación en PHP/Intermedio/Arrays

De Wikilibros, la colección de libros de texto de contenido libre.

Introducción

[editar]

Los arrays son una recolección de datos en una misma variable, por ejemplo un arreglo de los dias de la semana podría ser así:

 $Dias = array('Lunes','Martes','Miércoles','Jueves','Viernes','Sábado','Domingo');

Ahora bien, si deseamos imprimir un contenido seria, por ejemplo:

 echo "Hoy es ".$Dias[2]." y mañana sera ".$Dias[3];

Lo cual imprime:

 Hoy es Miércoles y mañana sera Jueves

Asi pues podemos notar que el arreglo comienza a recorrerse a partir de la dirección 0, es decir Dias[0] corresponde a 'Lunes' y Dias[6] corresponde a 'Domingo'.

Si deseamos imprimir todos los días de la semana podríamos hacerlo en un ciclo utilizando una variable bandera "i", ejemplo:

 for ($i=0;$i<=6;$i++)
  echo $Dias[$i]."," ;

Lo cual imprimiria:

 Lunes,Martes,Miércoles,Jueves,Viernes,Sábado,Domingo

Existen varias formas de definir una variable como array (o un valor). Las más comunes son:

 $variable = array(
             'indice' => 'valor',
             'valor', // Si se omite el índice el valor es el primer número natural no usado (de 0 a infinito)
             );
 $variable[] = 'valor';
 $variable['indice'] = 'valor';

Hay que recordar que al escribir dos veces un mismo índice del array, los datos se sobreescriben:

 $array = array(
             'valor_del_indice_0'
          );
 var_dump($array);
 $array[0] = 'valor_nuevo';
 var_dump($array);

Los ejemplos anteriores acceden mediante un índice a los elementos del array. PHP permite además acceder y modificar los arrays por métodos alternativos que pueden ser mucho más convenientes en determinadas ocasiones.

Utilizando arrays como pilas

[editar]

Para añadir un elemento al final del array utilizamos la función array_push y para leer y eliminar el último elemento añadido utilizamos la función array_pop. Esto nos permite p.ej, utilizar un array como una pila para almacenar el estado intermedio de una operación:

<?php
  $pila = array();
  array_push($pila,"\n "); 
  array_push($pila,"!");
  array_push($pila,"Mundo");
  array_push($pila,"Hola "); 
  array_push($pila,"¡");
  print array_pop($pila);
  print array_pop($pila);
  print array_pop($pila);
  print array_pop($pila);
  print array_pop($pila);
?>

La salida será similar a:

¡Hola Mundo!

Arrays como diccionarios (tablas Hash)

[editar]

Al igual que en las tablas de una base de datos muchas veces conviene indexar por una cadena de texto en vez de por un índice entero de forma que podemos buscar p.ej, el nombre de una persona a partir de su identificador fiscal. Supongamos que tenemos la siguiente tabla:

 Identificador| Nombre
  Fiscal      |
 =======================
 000000001    | Fernando
 000000002    | Marta
 000000003    | Alfonso

Para representar la misma mediante un array PHP:

<?php
  $bbdd = array();
  $bbdd["000000001"]="Fernando";
  $bbdd["000000002"]="Marta";
  $bbdd["000000003"]="Alfonso";
  print $bbdd["000000003"];
?>

Un ejemplo ligeramente más complejo. Supongamos que la tabla tiene varias columnas:

 Identificador| Nombre  |Apellido1|Apellido2|Edad|     
  Fiscal      |         |         |         |    |     
 =================================================     
 000000001    | Fernando|Benito   |Alcantara| 53 |               
 000000002    | Marta   |Abenia   |Carrasco | 23 |        
 000000003    | Alfonso |Cordero  |Campo    | 45 | 

Entonces puesto que nada impide que un elemento de un array sea a su vez otro array:

<?php
  $bbdd = array();
  $bbdd["000000001"]=array("Fernando","Benito ","Alcantara","53");
  $bbdd["000000002"]=array("Marta   ","Abenia ","Carrasco ","23");
  $bbdd["000000003"]=array("Alfonso ","Cordero","Campo    ","45");
  print_r($bbdd["000000003"]);
?>

La salida del script será similar a:

Array
(
    [0] => Alfonso 
    [1] => Cordero
    [2] => Campo    
    [3] => 45
)

A la hora de crear/inicializar/definir el array podemos también utilizar la sintaxis:

array("clave1"=>"valor1","clave2"=>"valor2","clave3"=>"valor3",...)

lo cual nos permite mejorar el ejemplo anterior:

<?php
  $bbdd = array();
  $bbdd["000000001"]=array("Nombre"=>"Fernando","Apellido1"=>"Benito ","Apellido2"=>"Alcantara","Edad"=>"53");
  $bbdd["000000002"]=array("Nombre"=>"Marta   ","Apellido1"=>"Abenia ","Apellido2"=>"Carrasco ","Edad"=>"23");
  $bbdd["000000003"]=array("Nombre"=>"Alfonso ","Apellido1"=>"Cordero","Apellido2"=>"Campo    ","Edad"=>"45");
  print_r($bbdd["000000003"]);
  print("Edad:".$bbdd["000000003"]["Edad"]);
?>

La salida entonces será similar a:

Array
(
   [Nombre] => Alfonso 
   [Apellido1] => Cordero
   [Apellido2] => Campo    
   [Edad] => 45
)
Edad:45