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.

Lo primero vamos a ver como sería un array con elementos duplicados:

  1. $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.
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.

Así tendríamos que

  1. $lista[0] -> 1
  2. $lista[1] -> ''
  3. $lista[2] -> 2
  4. $lista[3] -> 3
  5. $lista[4] -> 4
  6. $lista[5] -> ''

Es por ello que necesitamos apoyarnos en una segunda función llamada array_values(). Esta función retorna todos los valores del array y los reindexa. 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:

  1. $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. 😀

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

*

*