
Mediante un código muy sencillo vamos a poder eliminar elementos duplicados de un array en PHP. Vamos a ver que la utilización de dos funciones nos pueden resolver este engorroso problema. Para que al final los valores que aparezcan en el array sean únicos.
Lo primero vamos a ver como sería un array con elementos duplicados:
$lista = array(1,1,2,3,4,4,4,5,6,7,7,8,9,10,10);
Ahora, sobre este array vamos a aplicar la función array_unique()
. Esta función elimina los elementos duplicados que existan en el array. En este momento podemos pensar… «pues era extremadamente fácil»… pero, por desgracia, no es así. array_unique()
elimina los elementos duplicados, si bien no reasigna los índices del array y nos dejaría índices vacíos. Estos serían los índices en los que estaban los elementos duplicados.
Una vez ejecutada la función array_unique()
sobre el array que teníamos definido inicialmente, tendríamos la siguiente estructura:
$lista[0] -> 1 $lista[1] -> '' $lista[2] -> 2 $lista[3] -> 3 $lista[4] -> 4 $lista[5] -> ''
El contenido del array lo podemos ver utilizando la función print_r()
que nos mostrará la información mostrada antes.
En esta situación lo que necesitamos es apoyarnos en una segunda función llamada array_values()
. Esta función retorna todos los valores del array y los re-indexa. De esta manera ya tenemos eliminados los índices vacíos.
Así el código que nos permite eliminar elementos duplicados de un array en PHP será el siguiente:
$lista_simple = array_values(array_unique($lista));
Vemos que ambas funciones devuelven un array, es por ello que hay que asignarlo a un nuevo array.
Bueno, parece que al final eliminar elementos duplicados de un array en PHP si que era sencillo. :-D
Moisés Alcocer Canet
Hola, buen aporte.
Al final por a o por b acabamos escribiendo una función.
Yo incluiría algo como limpieza de blancos en caso de que el array contenga strings:
$arr = array(‘1’, ‘2’, 1, 2, ‘abc’, ‘ abc ‘);
foreach ($arr as $valor) {
if (is_string($valor))
$arr[ $i ] = trim($valor);
}
así obtenemos: [‘1’, ‘2’, ‘abc’] en lugar de [‘1’, ‘2’, ‘abc’, ‘ abc ‘], claro que todo depende de lo que necesitamos.
Un saludo.