Introducción al PHP (Parte 15: Matrices)

  En esta entrada de la serie de entradas acerca del lenguaje de guiones PHP, se hablará de uno de los elementos más poderosos de este tipo de lenguaje informático: las matrices ("arrays", en inglés).
  En general, dentro del contexto informático, una matriz es un conjunto de datos del mismo tipo, identificados por el mismo nombre, y que se pueden distinguir mediante un número de índice.
 Se trata, pues de un mapa, es decir, un tipo de datos que asocia valores con claves, ordenado. Puede compararse con un vector matemático.

  Sus principales utilidades son:
  •   Agrupar variables del mismo tipo en una estructura.
  •   El manejo de grandes cantidades de datos a la vez.

   La sintaxis básica de una matriz indexada (índice numérico), o secuencial, es:
$<matriz>[<índice 0>] = <elemento 1>;
$<matriz>[<índice 1>] = <elemento 2>;
$<matriz>[<índice 2>] = <elemento 3>;
...,
o bien (desde PHP 5.4)  
$<matriz> = [<elemento 1>, <elemento 2>, <elemento 3>,...];,
o bien
$<matriz> = [<índice 0> => <elemento 1>, <índice 1> => <elemento 2>, ...];.

  El índice es el lugar que ocupa el elemento en la matriz, siempre comienza por el valor "0". No obstante, no es obligatorio dar un valor específico al mismo, pudiéndose dejar en blanco (con lo que la propia matriz otorga dicho valor de índice secuencialmente según la posición de los elementos).
  Por su parte, los elementos de la matriz son los datos almacenados en esta. Estos elementos suelen ser de tipo numérico o cadena de caracteres, pero no es necesario que, en una misma matriz, sean todos del mismo tipo.
  Otro modo de declarar una matriz es mediante la función array(). La mencionada función devuelve una matriz cuyos elementos son los parámetros de la función. Su sintaxis puede ser cualquiera de las siguientes:
array(<índice 0> => <elemento 1>, <índice 1> => <elemento 2>, ...),
array(
          <índice 0> => <elemento 1>,
          <índice 1> => <elemento 2>,
           ...
).

  Existe un segundo tipo de matrices, se trata de la matriz asociativa, o no secuencial, en la que los índices de esta se componen de una cadena de caracteres. Sin embargo, su sintaxis es la misma que la de la matriz secuencial.

  Para acceder al contenido de un elemento de la matriz se debe emplear la siguiente sintaxis de PHP junto los comandos apropiados de este lenguaje para lograr el efecto que el usuario desee realizar con el guión:
$<matriz>[<índice>].

   Puede eliminarse una matriz entera, o uno de sus elementos, mediante la función unset(). Cuando se inserta el nombre de la matriz como valor, se eliminará la matriz al completo, mientras que si se añade como valor el nombre de la matriz y su índice como valor de la función se eliminará el elemento correspondiente (su índice no será reutilizado de forma automática).
  Otras funciones útiles de las variables son:
  •   array_push($<matriz>, $<valor>): Inserta uno o más elementos al final de la matriz.
  •   $<valor> = array_pop ($<matriz>): Extrae el último elemento del final de la matriz.
  •   array_unshift($<matriz>, $<valor>): Inserta un elemento al principio de la matriz.
  •   $<valor> = array_shift ($<matriz>): Extrae el primer elemento de una matriz.
  •   $<trozo>  = array_slice($<matriz>, $offset[, $<longitud>]): Devuelve parte de una matriz (la matriz original no se modifica).
  •    $<trozo>  = array_splice($<matriz>, $offset[, $<longitud>, $<matriz 2>]): Elimina o reemplaza parte de los elementos de una matriz.
  •    sort ($<matriz>): Ordena una matriz.
  •    $<matriz> = range($<inicio>, $<fin>): Crea una matriz con un determinado rango alfanumérico.

USO CON VARIABLES

  En cuanto a su utilización con las variables:
  •   Una variable de matriz no inicializada se convierte en una matriz vacía.
  •    Existe un método para acceder a las variables desde un ámbito global, el uso de la matriz $GLOBALS, que es una matriz asociativa con el nombre de la variable global como clave y los contenidos de dicha variable como el valor del elemento de la matriz. $GLOBALS existe en cualquier ámbito porque es una variable superglobal.
  •   Existe un problema de ambigüedad en el uso de variables variables con matrices. El uso de una forma como $$<matriz>[<elemento>], crea un conflicto en el intérprete PHP, que no sabe si el usuario desea emplear $<matriz>[<elemento>] como una variable, o si pretende utilizar $$<matriz> como variable y [<elemento>] como índice de la misma. La sintaxis correcta para el primer caso es ${$<matriz>[<elemento>]}, mientras que para el segundo es ${$<matriz>}[elemento].
  •   Para determinar si una variable es de tipo matriz se puede utilizar la función is_array(), que devuelve verdadero si el tipo de la variable es una matriz y falso si no es así.
  •   Es posible obtener la cantidad exacta de elementos de una matriz empleando la función count(<variable>). Dicha función devolverá el número de elementos de la matriz; pero si la variable no corresponde a una matriz, la función devolverá el valor "1", y si la matriz no está inicializada (o es NULL) devolverá el valor "0".

OPERADORES DE MATRICES

   La clase de operador "array" sirve para poder realizar operaciones entre matrices, y tiene un comportamiento específico. Los miembros de este tipo de operadores son:


Operador
Sintaxis
Descripción
Unión $a + $b  Unión de "$a" y "$b".
Igualdad $a == $b  Verdadero cuando "$a" y"$b" tienen las mismas parejas clave/valor.
Identidad $a === $b  Verdadero cuando "$a" y"$b" tienen las mismas parejas clave/valor en el mismo orden y de los mismos tipos.
No igual $a != $b  Verdadero si "$a" no es igual a "$b".
No igual $a <> $b  Verdadero si "$a" no es igual a "$b".
No identidad $a !== $b   Verdadero si "$a" no es idéntico a "$b".


  En el uso de estos operadores se debe tener presente que:
  •   Para realizar la unión de matrices  se deben incluir todos los elementos de la matriz de la izquierda más los elementos de matriz de la derecha que tengan claves no existentes en la primera matriz.
  •   Al comparar los elementos de las matrices se consideran equivalentes si estos tienen la misma clave y valor.

LAS MATRICES EN EL CONTROL DE BUCLES

  Mientras que las matrices secuenciales pueden recorrerse utilizando las sentencias de estructura repetitiva while y for, para poder hacer lo mismo en una matriz no secuencial se deberá emplear la sentencia de control de bucles foreach.
  La sentencia antes mencionada, al estar totalmente relacionada con la manipulación de matrices (y objetos, pero ese tema no se tratará aquí), proporciona un método sencillo de recorrerlas. Al funcionar casi exclusivamente sobre matrices,  emitirá un error al intentar usarla con una variable de tipo diferente de datos o una variable non inicializada.
  Hay dos sintaxis:
foreach (<expresión matriz> as $<valor>)
sentencia;
o bien
foreach (<expresión matriz> as $<clave> => $<valor>)
sentencia;


  Ambas expresiones pueden utilizarse con una sentencia o con claves para definir un bloque de sentencias que se ejecutará dentro del bucle.
  Por una parte, la primera forma de expresar un foreach recorre la matriz dada por "expresión matriz". En cada iteración, el valor del elemento actual se asigna a "$<valor>" y el puntero interno de la matriz avanza una posición (así en la siguiente iteración se  observará el siguiente elemento). Se utiliza, pues, para obtener únicamente el contenido de la matriz.

  Por otra parte, la segunda forma, además, asigna la clave del elemento actual a la variable "$clave" en cada iteración, lo que la hace óptima para obtener tanto el índice (indicado en "$<clave>") como el contenido de la matriz.

  El uso de matrices en las estructuras repetitivas debe observar los siguientes puntos específicos:
  •   En PHP 5, cuando foreach inicia su ejecución, el puntero interno de la matriz se pone automáticamente en el primer elemento de la misma. Esto significa que no es necesario llamar a la función reset() antes de un bucle foreach. Ya que foreach depende del puntero de matriz interna en PHP 5, cambiar este dentro del bucle puede conducir a un comportamiento inesperado.
  •   En PHP 7, esta sentencia no emplea el puntero interno de la matriz.
  •   Para modificar directamente los elementos de la matriz dentro del bucle, hay que anteponer "&" a "$<valor>", con lo que el valor será asignado por referencia.
  •   La referencia del "$<valor>" y el último elemento de la matriz permanecen aún despues de terminar el bucle foreach. Por ese motivo es recomendable destruirlos con unset(). De lo contrario, se experimentará un funcionamiento anómalo. 
  Pueden verse ejemplos de programación en PHP utilizando matrices en el siguiente enlace.
  Espero que la presente entrada haya sido interesante para el lector. En caso afirmativo, aguardo que la comente y/o la comparta, por favor. 

No hay comentarios:

Publicar un comentario

Deje aquí su comentario, si no puede comentar, pruebe a hacerlo desde otro navegador de red u otro equipo.