Eliminar elementos duplicados de un array en PHP

10/Ene/2011 PHP 1 Comentario
programación php

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

Vídeos sobre PHP


Un comentario en “Eliminar elementos duplicados de un array en PHP”

Víctor Cuervo

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.

¿Algo que nos quieras comentar?

Déjanos tu comentario, no te preocupes que tu email no será publicado

*

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.