Insertar elementos en medio de una matriz en PHP

Facebooktwittergoogle_pluslinkedinmailFacebooktwittergoogle_pluslinkedinmail

PHP nos ofrece varias posibilidades para agregar elementos a una matriz. Desafortunadamente, con las funciones nativas del lenguaje sólo podemos efectuar la inserción de un elemento al principio o al final de la matriz, pero no en una posición específica “en medio”. No es una necesidad que se plantee muy a menudo, porque, dada una matriz cualquiera, sea unidimensional o bidimensional, podemos ordenarla por varios criterios. Sin embargo, cuando nos surge esta necesidad concreta, el lenguaje no nos ofrece ninguna solución clara. Recientemente me surgió esta situación en un proyecto en el que estoy trabajando actualmente.

 

githubPuedes descargar las funciones de inserción en matrices, totalmente actualizadas, desde https://github.com/eldesvandejose/insercion-en-matrices

Para resolverlo he creado dos funciones al respecto: insertAfter, que inserta un elemento nuevo en la matriz después de uno concreto que específiquemos, e insertBefore, que inserta un elemento en la matriz antes de uno concreto. Los códigos aparecen al final de este artículo, para que los copies en tus proyectos, si te hacen falta. Como puedes ver, son extremadamente simples, por lo que puedes editarlos si lo deseas, para adaptarlos a lo que necesites. No obstante, creo que, como están, te resolverán la papeleta si se te presenta.

El funcionamiento es muy simple. Vamos a analizarlo para insertAfter, por ejemplo. Los argumentos que recibe la función son:

$matrizOriginal. Es la matriz en la que queremos insertar un elemento en una posición específica.

$elementoNuevo. Es el elemento que queremos insertar en la matriz.

$after. Es el elemento después del cual queremos insertar el nuevo.

$comparativa. Es la clave por la que vamos a referirnos al elemento después del que queremos insertar el nuevo. Este parámetro tiene, por defecto, el valor -1, por lo que es opcional.

Si no cambiamos el valor de $comparativa (lo dejamos, cómo viene por defecto, en -1), el nuevo elemento se insertará después de aquel cuya clave coincida con $after. Lo veremos más claro con un ejemplo:

El código está documentado para que puedas entender lo que ocurre. Cárgalo en tu navegador y observa cómo el nuevo elemento se ha insertado en la posición que indicábamos.

ATENCIÓN. No olvides tener en tu directorio de localhost el script funciones_de_inserción.php con los códigos de las funciones que incluimos al final de este artículo.

Ahora supongamos que queremos insertar el nuevo elemento detrás del que tiene, como nombre, Andrés. La llamada a la función cambia, así:

$personas = insertAfter($personas, $personaNueva, "Andrés", "nombre");

Cómo ves, esta vez sí usamos el cuarto parámetro, para indicar que no vamos a buscar por la clave general de los elementos, sino por una clave específica de cada uno de ellos. Cambia la línea en tu código y ejecútalo para comprobar que, una vez más, hemos obtenido el resultado esperado. Ahora el nuevo elemento está detrás de aquel que tiene el valor especificado, en la clave especificada.

Para el uso de insertBefore es igual, sólo que la inserción se hará antes del elemento especificado.

Las funciones aparecen a continuación, dentro del script que, en nuestro ejemplo, hemos llamado funciones_de_insercion.php:

Espero que te resulte útil.

 

githubPuedes descargar las funciones de inserción en matrices, totalmente actualizadas, desde https://github.com/eldesvandejose/insercion-en-matrices
     

Un comentario:

  1. Pingback: PHP-TUT-08 Matrices en PHP (II) » eldesvandejose.com

Deja un comentario

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