Ordenar matrices multidimensionales en PHP

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

matrizEn un tutorial de PHP vimos cómo ordenar matrices. En este artículo vamos a conocer un recurso que PHP nos ofrece cuando se trata de ordenar matrices multidimensionales, manteniendo, por supuesto, la integridad de los datos originales.

ORDENAR MATRICES MULTIDIMENSIONALES

Este es un tema peliagudo en muchos lenguajes de programación. Se trata de ordenar los elementos de una matriz bidimensional (que, cómo ya sabes, son, a su vez, matrices unidimensionales), por un criterio. Por ejemplo, en las matrices que hemos visto de amigos, podemos querer ordenarlas por el nombre. Afortunadamente, PHP cuenta con la función array_multisort(), concebida para hacer, precisamente, eso. Vamos a ver cómo, en un ejemplo que hemos llamado ordenarMulti.php (la imaginación al poder 😀 ).

Lo que queremos hacer es ordenar la matriz de amigos por el nombre, de modo que, por supuesto, se mantenga la relación del nombre con el resto de los datos, es decir, que se mantenga lo que se conoce cómo la integridad de datos. Para ello creamos una matriz auxiliar que, en nuestro ejemplo, hemos llamado $nombre. El proceso que aparece con la instrucción foreach probablemente no lo entiendas totalmente ahora, hasta que no publiquemos el artículo sobre estructuras de control de flujo pero, básicamente, lo que hace es recorrer la matriz de amigos y rellenar la matriz auxiliar $nombre con los nombres de los amigos, asígnando a cada uno la clave que el amigo tiene en la matriz original. Para que te hagas idea de lo que estamos haciendo, al terminar el bucle foreach la matriz auxiliar $nombre tendrá el siguiente contenido:

 

CLAVE VALOR
0 Pedro Torres
1 Carlos Gómez
2 Susana Casas
3 Carmen Pérez

La forma en que se logra esto, como te he comentado, la veremos en detalle cuando hablemos de estructuras de control de flujo.

A lo que vamos. La función array_multisort() toma tres argumentos. El primero es la matriz auxiliar que, como hemos visto, se construye a partir del dato por el que queremos ordenar. El segundo es una constante propia de PHP, para indicar si la ordenación se va a realizar de forma ascendente o desdendente: puede ser SORT_ASC o SORT_DESC. El tercer argumento es la matriz bidimensional que vamos a ordenar siguiendo el criterio elegido. Al ejecutarse esta función la matriz bidimensional queda ordenada, tal como nos muestra en pantalla el script del ejemplo.

Pero array_multisort() es más potente que esto. Nos permite ordenar matrices por más de un índice, simultáneamente. Aclaremos esto. Supón que tienes una matriz, digamos, de empleados de una empresa. Cada uno de estos empleados tiene un rango, un nombre, unos apellidos y otros dstos adicionales. El rango puede ser uno de tres posibles: directivo, mando intermedio y empleado. La matriz podría tener una estructura similar a la siguiente:

Lo que queremos es que se nos ordena la matriz por rango pero, dentro de cada rango, por apellidos y nombre (en esa secuencia). Nada más fácil. Observa las siguientes líneas de código:

Como ves. antes de la constante que establece el sentido de la ordenación, podemos indicar todos los campos necesarios, siempre que hayamos creado las correspondientes matrices en el bucle previo.

     

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *