Вы находитесь на странице: 1из 19

Matrices

Notación compacta de matrices


En PHP 5.4 (publicado en marzo de 2012) se introdujo en PHP la notación
compacta de matrices. Como se explica en la lección Notación clásica de matrices, la
diferencia entre ambas notaciones reside en la manera de definir matrices o de añadir
valores a una matriz.

A partir del curso 2017/18 en estos apuntes se utilizará la notación compacta en


los ejemplos y soluciones de ejercicios, aunque los alumnos pueden utilizar la notación
clásica si así lo desean.

Qué es una matriz


Una matriz es un tipo de variable que permite almacenar simultáneamente varios
datos diferentes, a los que se accede mediante un índice, numérico o de texto.

En PHP, una matriz es un tipo de variable muy flexible, ya que podemos añadir,
modificar, eliminar o reordenar los elementos de forma individual, que pueden ser de
tipos de datos diferentes.

En PHP, si:

 los elementos de una matriz son datos de tipos simples (booleanos, enteros,
decimales o cadenas), en ese caso sólo se necesita un índice para identificar a los
datos y se dice que las matrices son unidimensionales y también se les llama
vectores.
 los elementos de una matriz son a su vez también matrices, en ese caso se
necesitan varios índices para identificar a los datos y se dice que las matrices
son multidimensionales.

Crear una matriz


En la notación compacta, las matrices se crean empleando corchetes ([]).
Para hacer referencia a los valores individuales de la matriz, se deben utilizar
índices, que se escriben entre corchetes ([ ]). Si al crear la matriz no se han indicado
otros valores de índices, el primer término tiene el índice [0], el segundo tiene el índice
[1], etc.:

PHP sustituye las referencias a valores de matrices de una dimensión dentro de


las cadenas, por lo que no es necesario concatenar cadenas y referencias a matrices.

Una vez creada la matriz, los elementos individuales se pueden utilizar como si
fueran variables independientes. Pero para referirse a un elemento individual, hay que
indicar siempre el índice correspondiente.

Si se solicita un valor no definido de una matriz, se produce un aviso (undefined


offset). Los avisos no interrumpen la ejecución del programa, pero se deben corregir
porque el programa seguramente no tendrá el comportamiento esperado:

Se puede crear una matriz vacía (para añadirle posteriormente elementos):

También se pueden crear matrices asignando directamente un elemento de la


matriz.

Matrices asociativas
Las matrices de PHP son matrices asociativas, es decir, que los índices no tienen
por qué ser correlativos, ni siquiera tienen por qué ser números.

Al crear matrices asociativas, debemos indicar el valor de los índices, utilizando


la notación $indice => $valor:
PHP sustituye las referencias a valores de matrices de una dimensión dentro de
las cadenas, por lo que no es necesario concatenar cadenas y referencias a matrices,
pero los índices deben escribirse sin comillas, aunque sean cadenas.

Si la referencia a un valor de una matriz está fuera de una cadena o entre llaves,
los índices que son cadenas deben escribirse con comillas.
Matrices multidimensionales
Las matrices pueden ser multidimensionales, es decir, matrices cuyos elementos
son a su vez matrices. Para referirse a los elementos concretos, se necesitan utilizar
varios índices (tantos como dimensiones -niveles de anidamiento- tenga la matriz).

PHP no sustituye las referencias a valores de matrices de más de una dimensión


dentro de las cadenas, por lo que se necesita o bien utilizar llaves, o bien concatenar
cadenas y referencias a matrices. Como en el caso de las matrices de una dimensión, los
índices que sean cadenas deben escribirse con comillas si la referencia está dentro de
una cadena o entre llaves.
Imprimir todos los valores de una matriz: la función
print_r()
La instrucción print permite imprimir valores individuales de una matriz, pero no
matrices completas.
La función print_r($variable [, $devolver]) permite imprimir todos los valores de
una matriz de forma estructurada. En general, print_r() imprime cualquier variable
compuesta de forma legible.

Esta función no se suele utilizar en programas definitivos, pero puede ser útil
mientras estamos elaborando un programa, por ejemplo para comprobar en un punto del
programa si la matriz contiene los valores esperados. Una vez comprobado, la
instrucción se puede comentar o borrar.

Aunque print_r() genera espacios y saltos de línea en el código fuente de la página


para indicar el anidamiento, print_r() no genera etiquetas html, por lo que el navegador
no muestra esos espacios y saltos de línea.

Para mejorar la legibilidad una solución es añadir la etiqueta <pre>, que fuerza al
navegador a mostrar los espacios y saltos de línea.
Añadir elementos a una matriz
En la notación compacta, se pueden añadir elementos a una matriz indicando o no
el índice del nuevo elemento:

 Si no se indica el índice, el nuevo elemento toma como índice el siguiente al mayor


de los existentes (o el índice 0 si no había ningún valor numérico):
 Indicando el índice, se asigna el elemento de la matriz:

Más información general sobre las matrices


Borrar una matriz o elementos de una matriz
La función unset() permite borrar una matriz o elementos de una matriz.

Si se intenta borrar un elemento no definido, PHP no genera ningún aviso.


Contar elementos de una matriz
La función count($matriz) permite contar los elementos de una matriz.

En una matriz multidimensional, la función count($matriz) considera la matriz


como un vector de vectores y devuelve simplemente el número de elementos del primer
índice:
Para contar todos los elementos de una matriz multidimensional, habría que
utilizar la función count($matriz, COUNT_RECURSIVE).
En el ejemplo anterior, la respuesta 8 se debe a que la función count()recursiva
considera la matriz como un vector de vectores y cuenta los elementos que hay en cada
nivel. Desde ese punto de vista, la matriz contiene tres elementos que a su vez contienen
dos, dos y un elementos, lo que da un total de ocho elementos.

Si quisiéramos contar únicamente los elementos de una matriz bidimensional


habría que restar los dos resultados anteriores (5 = 8 - 3):
Máximo y mínimo
La función max($matriz, ...) devuelve el valor máximo de una matriz (o varias). La
función min($matriz, ...) devuelve el valor mínimo de una matriz (o varias).
Los valores no numéricos se tratan como 0, pero si 0 es el mínimo o el máximo, la
función devuelve la cadena.

Ordenar una matriz


Existen varias funciones para ordenar matrices. Las más simples son las siguientes:

 Cuando los índices de la matriz que vamos a ordenar no son importantes y se


pueden modificar, podemos utilizar las funciones sort($matriz, $opciones) y
rsort($matriz, $opciones), que ordenan atendiendo únicamente a los valores de
la matriz (no a sus índices), en orden creciente o decreciente, y reindexan la
matriz:
o sort($matriz, $opciones): ordena por orden alfabético / numérico de los
valores y genera nuevos índices numéricos consecutivos a partir de cero:
o rsort($matriz, $opciones): ordena por orden alfabético / numérico inverso
de los valores y genera nuevos índices numéricos consecutivos a partir de
cero:
Para ver la diferencia entre estas funciones, la tabla siguiente resume los
ejemplos anteriores:

Matriz sort() rsort() asort() arsort() ksort() krsort()


inicial
Array Array Array Array Array Array Array
( ( ( ( ( ( (
[5] => [0] => [0] => uno [5] => [1] => uno [1] => uno [9] =>
cinco cinco [1] => cinco [9] => [5] => nueve
[1] => [1] => nueve [9] => nueve cinco [5] =>
uno nueve [2] => nueve [5] => [9] => cinco
[9] => [2] => cinco [1] => uno cinco nueve [1] => uno
nueve uno ) ) ) ) )
) )

Buscar un valor en una matriz


La función booleana in_array($valor, $matriz[, $tipo]) devuelve true si el valor
se encuentra en la matriz. Si el argumento booleano $tipo es true, in_array() comprueba
además que los tipos coincidan.
La función array_search($valor, $matriz[, $tipo]) busca el valor en la matriz y,
si lo encuentra, devuelve el índice correspondiente, pero si hay varios valores
coincidente sólo devuelve el primero que encuentra.

La función array_keys($matriz[, $valor[, $tipo]) busca el valor en la matriz y, si


lo encuentra, devuelve una matriz cuyos valores son los índices de todos los elementos
coincidentes.

Вам также может понравиться