Matrices en PHP

Matrices en PHP
COMPÁRTELO:

Las matrices: muchos datos provisorios

Un paquete de variables

Una matriz es un lugar en el que almacenaremos datos, de la misma manera que en las variables, pero con la posibilidad de almacenar varios datos (valores) ordenados en distintos compartimientos, en lugar de un solo dato, como en el caso de una variable.

Podríamos decir que, si una variable era una bicicleta que acarreaba una sola pequeña caja con su carga, las matrices equivaldrían a un camión cargado de decenas, cientos o miles de cajas, cada una guardando un dato diferente, pero todos dentro de un mismo contenedor (el camión).

Otra comparación: si una variable era un estante único (y muy pequeño) en el que únicamente podíamos guardar un solo libro, comparativamente, una matriz equivaldría a un gran estante en el que entran decenas de libros o, incluso, una biblioteca completa, con decenas de estantes a la vez.

Muchos libros, muchos estantes, pero todos dentro de una misma biblioteca, de un mismo elemento contenedor.

Veamos un par de ejemplos que nos aclararán un poco más la diferencia entre una variable y una matriz.

Este código declara y adjudica valor a una variable:

<?php
$numero=514;
print($numero);
//escribe 514
?>

El nombre de la variable es $numero, y el valor almacenado en este momento es el número 514.

Ahora veamos la diferencia en el caso de definir una matriz:

En el siguiente código, declararemos una matriz de tres elementos o celdas, a la que denominaremos $numeros.

<?php
$numeros[0]=75;
$numeros[1]=90;
$numeros[2]=45;
print ($numeros[0]."<br />".$numeros[1]."<br />".$numeros[2]);
//escribirá: 75<br />90<br />45
?>

En este caso, el nombre de la matriz es $numeros, y tiene tres subdivisiones internas a las que denominaremos “elementos” o “celdas” (cada elemento de la matriz es una de las tres “cajitas” que observamos en la imagen anterior).

Notemos que cada elemento (o celda) es un par que consta de un índice (identificador) y de un valor.

El primer elemento de esta matriz tiene como índice el número 0 y como valor un 75.

El segundo elemento, con índice 1, almacena un 90 y, el tercer elemento de índice 2, guarda un número 45 en su interior.

Es decir, a diferencia de una variable, una matriz almacena varios datos, cada uno de ellos  con el mismo nombre de matriz ($numeros, en este caso), pero con un nombre de índice siempre diferente, único.

Sería similar a un estante de una biblioteca, al que denominamos “libros de inglés”. Si quiero el primero de los libros de ese estante, lo pediría diciendo “el primero libro del estante de inglés”; si quisiera el segundo, diría “el segundo libro del estante de inglés”; en la programación en PHP, podríamos referirnos a esa situación con esta notación $libros_de_ingles[1] y, si quisiera que me alcanzaran el segundo de los libros, me referiría a él como $libros_de_ingles[2], y así sucesivamente.

El único punto que entra en conflicto con la vida real es que los índices que identifican a cada celda de una matriz, en PHP, no se numeran a partir de 1 en adelante, como en la vida real (nunca pediríamos “el libro cero del estante”, pedimos el  “primero”, el “1”), sino que en PHP se numeran a partir de cero. La primera celda es la [0] (se lee “subcero”).  La segunda, es la “sub 1”, la tercera es la “sub 2”, y así sucesivamente, manteniendo ese “corrimiento” de un dígito”.

Veamos un segundo ejemplo de una matriz:

<?php
$paises[0]="Afganistan";
$paises[1]="Albania";
$paises[2]="Alemania";
$paises[3]="Andorra";
$paises[4]="Angola";
print ($paises[0]."<br />".$paises[1]."<br />".$paises[2]."<br />".$paises[3]."<br />".$paises[4]);
//escribirá: Afganistan<br />Albania<br />Alemania<br />Andorra<br />Angola
?>

Será sumamente común el utilizar matrices como almacen provisorio de datos provenientes de un almacén permanente de datos, tal como una base de datos o un archivo de texto plano.

Distintas funciones de PHP se encargarán de ubicar dentro de matrices los datos leídos de una base de datos (como la lista de países para mostrarlos en un menú de selección HTML de un formulario, por ejemplo, o el listado de los distintos productos de un sitio de comercio electrónico, incluyendo su nombre, descripción, precio, imagen, etc.), y será muy fácil trabajar con esa matriz como depósito temporal de datos, típicamente utilizando un bucle para recorrerla.

Índices numéricos

Las matrices pueden utilizar dos tipos de índices: numéricos (los que vimos hasta ahora) y los alfanuméricos.

Comenzaremos a ver cómo se cargan datos en las matrices de índices numéricos.

Hay diferentes maneras de “inicializar” una matriz de índices numéricos (esto es, darle un índice y un valor a cada una de sus celdas; es decir: colocar datos dentro de ella). Podemos realizar esa tarea de forma explícita, de forma implícita, mezclando ambas formas, o usando el constructor array. Veamos, a continuación, cada una de estas posibilidades.

Declaración explícita:

Se declara explícitamente cada índice de la matriz, colocando entre corchetes el número de índices deseado para el valor que inmediatamente le adjudicamos:

$paises[0]=”afganistan”;
$paises[1]=”Albania”; //etc.

Los números de índice no necesariamente deben comenzar de cero, ni necesariamente ser consecutivos.

Si luego precisamos acceder a un dato almacenado, lo hacíamos especificando su índice, de esta manera:

print ($paises[0]);
print ($paises[1]); //etc.

Y así sucesivamente, expecificando el número de índices que identificará a cada dato.

Declaración implícita:

Pero también podríamos haber realizado el mismo ejemplo con una declaración implícita de índices, de la siguiente manera (notemos los corchetes vacíos en el primer renglón):

<?php
$paises[]="Afganistan"; //esta es una declaración implícita, dejando vacios los corchetes.
$paises[1]="Albania";
$paises[2]="Alemania";
$paises[3]="Andorra";
$paises[4]="Angola";

print ($paises[0]."<br />".$paises[1]."<br />".$paises[2]."<br />".$paises[3]."<br />".$paises[4]);
//escribirá: Afganistan<br />Albania<br />Alemania<br />Andorra<br />Angola
?>

Si omitimos los números de índices al momento de ir ubicando valores dentro de las celdas de la matriz, el intérprete de PHP le asignará automáticamente uno, y colocará números correlativos, comenzando por el menor número posible (un cero, salvo que especifiquemos otra cosa) para la primera celda de la matriz.

Notemos que, al dejar vacíos los corchetes, simplemente se omite un paso, que es el de asignarle nosotros un número específico al índice, pero, de todos modos, el intérprete de PHP lo completa automáticamente.

Por lo tanto, en el momento en que se quiera leer esos datos, sigue siendo imprescindible especificar cuál celda de la matriz queremos leer.

No funcionaría si hacemos esto:

print $paises[]; //faltaría indicar cuál celda mostrar

Ya que estamos diciendo cuál de las celdas de la matriz queremos mostrar. Siempre dentro de los echo o print deberemos especificar explícitamente el índice al que queremos acceder.

Mezcla de declaración explícita e implícita:

También podría suceder que quisiéramos especificar un índice en particular para la primera celda de la matriz, y luego si dejar que el intérprete siga colocando los índices automáticamente, pero a partir de ese valor inicial que nosotros especificamos:

<?php
$dias[1] ="lunes"; //especificamos un índice inicial (el “1” en este caso), y luego dejamos que PHP coloque los demás automáticamente

$dia[]="martes";
$dia[]="miércoles";
$dia[]="jueves";
$dia[]="viernes";

print ($dias[1]."<br />".$dias[2]."<br />".$dias[3]."<br />".$dias[4]."<br />".$dias[5]);

//imprime lunes<br />martes<br />miércoles<br />jueves<br />viernes
?>

Al haber especificado nosotros uno de los índices, pero no los siguientes, PHP continúa la numeración desde el valor siguiente al último índice especificado.

La función array

Esta declaración implícita de índices numéricos es la misma que PHP emplea cuando utilizamos una forma mucho más simple y más breve de declarar matrices, mediante el uso de la función llamada array, cuya sintaxis veremos a continuación:

<?php
$paises=array("Argentina", "Uruguay", "Chile", "Perú");
//crea una matriz llamada $paises de cuatro elementos con índices numerados a partir de cero
$loteria=array(23,8,36,12,99);
//crea una matriz de cinco elementos con índices numerados a partir de cero.
$usuario=array("Juan Pérez", 24, "casado", 800);
//crea una matriz de cuatro elementos con índices numerados a partir de cero.
?>

Como vemos en el último caso, una única matriz puede almacenar datos de distinto tipo (caracteres, números enteros, decimales, etc.) y, por lo tanto, es necesario colocar entre comillas los textos para que PHP sepa que son, textos, y no números.

También notemos que simplemente una coma separa un dato del otro.

Tal como en la mezcla de asignación explícita e implícita de índices vista anteriormente, cuando usamos la función array también podemos forzar el índice de uno de los elementos de la matriz (no necesariamente debe ser el primero de ellos), y eso se realiza con el operador => de la siguiente manera:

<?php
$paises=array("Argentina", 10 => "Uriguay", "Chile", "Perú");
//cea una matriz llamada $paises de cuatro elementos, cuyo primer elemento posee un "0" como índice, el segundo un "10" y luego el resto continúa con "11" y "12".
?>

Índices numéricos no consecutivos

Es bastante común que los índices asignados a una matriz sean números salteados, no consecutivos como, por ejemplo, códigos de artículos. En ese caso, a medida que agregamos datos al vector, puede suceder que los índices no sean consecutivos y queden desordenados.

Por ejemplo:

<?php
$productos[1234]="Televisor LG de 42 pulgadas";
$productos[145]="Televisor Sony de 29 pulgadas";
$productos[899]="Televisor portatil de 12 voltios";
?>

Esta sería una matriz de índices numéricos, no consecutivos.

En este ejemplo, el primer índice e 1234 y el que le sigue no es 1235, como sería esperable si fuera consecutivo. Es 145 y, luego tampoco sigue 146, sino otro número cualquiera.

Ya veremos cómo interactuar con matrices que tengan este tipo de índices numéricos desordenados o no consecutivos, cuando aprendamos a recorrer las matrices mediante bucles.

Índices alfanuméricos

En muchos casos, en especial cuando trabajemos con bases de datos, definir los índices de la matriz con cadenas de texto (alfanuméricas) en lugar de utilizar números, será de mucha utilidad para facilitar la lectura del código.

En PHP se puede hacer de la siguiente manera:

<?php
$datos["nombre"]="Juan Pérez";
$datos["edad"]=24;
$datos["estado"]="casado";
$datos["sueldo"]=800;
print ($datos["nombre"]); //escribe: Juan Pérez
?>

Esto se lee “datos sub nombre”, “datos sub edad”, etc.

Notemos que dentro de los corchetes, en vez de números, hemos colocado palabras descriptivas de lo que contiene esa celda. Esos son los índices o identificadores alfanuméricos. Como todo texto en PHP, debe ir entre comillas. Son muy recomendables para facilitar la lectura, para darnos cuenta qué contiene cada celda de una matriz.

Matrices definidas automáticamente por el intérprete de PHP

Un caso especial dentro de las matrices de índices alfanuméricos, son aquellas matrices que el intérprete de PHP declara y completa con datos automáticamente, sin que nosotros tengamos que hacer nada, tan sólo leerlas y utilizar la información que nos proporcionan.

Ya que la lista de los posibles valores de índices alfanuméricos de estas matrices es muy extensa (a veces, decenas de valores posibles en cada matriz), se recomienda consultar el manual oficial de referencia de PHP en línea, en http://www.php.net/ agregando el nombre de la matriz que queremos conocer al final de la URl, por ejemplo:

http://www.php.net/_server

A continuación, veremos un cuadro con los nombres de estas matrices definidas por el intérprete de PHP:

MATRIZ

QUÉ CONTIENE

EJEMPLOS DE USO

$_SERVER

Contiene información disponible en el servidor Web: rutas, cabeceras HTTP enviadas por el navegador del usuario tales como el navegador utilizado, la dirección IP del usuario, etc.

echo $_SERVER [‘HTTP_USER_AGENT’];

$_ENV

Contiene información acerca del entorno en el que el intérprete de PHP está siendo utilizado (nombre de la computadora, del servidor, etc).

echo $_ENV [‘HOSTNAME’];

$_SESSION

Contiene las variables de sesión que hayamos declarado. El índice es el nombre de la variable.

echo $_SESSION [‘mi_variable’];

$_GET

Contiene las variables enviadas hacia el servidor mediante enlaces (adjuntadas a una petición HTTP). El índice es el nombre de la variable.

echo $_GET [‘mi_variable’];

$_POST

Contiene las variables enviadas mediante formularios que declaren el método “post”. El índice es el nombre de la variable

echo $_POST [‘mi_variable’];

$_COOKIE

Contiene las variables almacenadas por el navegador del usaurio den cookies. El índice es el nombre de la variable.

echo $_COOKIE [‘mi_variable’];

$_REQUEST

Contiene las variables almacenadas en las tres matrices anteriores: $_GET, $_POST y $_COOKIE. Es decir, todas las variables que fueron enviadas por el navegador del usuario hacia el servidor.

echo $_REQUEST [‘mi_variable’];

$_FILES

Contiene información acerca de los archivos que hayan sido enviados mediante un formulario que tuviera un control input de tipo file.

echo $_FILES [‘el_archivo’][name];

$GLOBALS

Contiene información sobre todas las variables definidas, ya sea automáticamente por el servidor, como definidas por nosotros mismos. Notemos que es la única matriz definida automáticamente que no lleva guión bajo delante de su nombre

Echo $GLOBALS [‘mi_variable’];

Muchos de los valores de estas matrices no están disponibles en todos los servidores, ya que dependen de que el administrador del servidor haya habilitado su uso, por lo cual no es posible hacer una lista completa que esté disponible bajo todas las circunstancias. Habrá que probar en cada servidor antes de utilizar un dato proveniente de estas matrices.

Notemos que todos los nombres de estas matrices –salvo uno- comienzan con guión bajo, y que todas estas matrices definidas por el intérprete de PHP llevan escrito su nombre completamente en mayúsculas, tal como si fueran una constante; eso permite que podamos diferenciarlas fácilmente dentro de nuestro código de las otras matrices que nosotros mismos hayamos declarado.

Será muy común de ahora en más que utilicemos en nuestros códigos datos obtenidos a partir de estas matrices definidas automáticamente por el intérprete de PHP.

Compártelo:

⇐Anterior


Constantes en PHP

Profesor de la Universidad de Guadalajara

Hugo Delgado Desarrollador y Diseñador Web en Puerto Vallarta

Profesional en Desarrollo y Posicionamiento Web desde hace más de 10 años continuos.
Contamos con más de 200 constancias y reconocimientos en la trayectoria Académica y Profesional, incluidos diplomados certificados por Google.

ARTÍCULOS RELACIONADOS:

0 Comentarios

 

Deja un Comentario

Recomendado para ti:

Estructura básica de una página Web - <html>, <head> y <body>Estructura básica de una página Web - <html>, <head> y <body>

En este capítulo vamos a aprender cuál es la estructura básica de un código  HTML (es decir, un docum...