20 May
php : Eliminar elementos duplicados de un array
Posted on 2008 under Programacion, php | 7 comentarios
# Ésta función recibe un array con campos duplicados y lo
# devuelve sin duplicidades.
function elimina_duplicados($array, $campo)
{
foreach ($array as $sub)
{
$cmp[] = $sub[$campo];
}
$unique = array_unique($cmp);
foreach ($unique as $k => $campo)
{
$resultado[] = $array[$k];
}
return $resultado;
}
# Prueba
$v_usr = array();
$v_usr[] = array('foto'=>'Pepe1.jpg','nif'=>'222222');
$v_usr[] = array('foto'=>'Pepe2.jpg','nif'=>'222222');
$v_usr[] = array('foto'=>'Julian.jpg','nif'=>'3333333');
$v_usr[] = array('foto'=>'Miguel.jpg','nif'=>'4444444');
$v_usr[] = array('foto'=>'Marcos.jpg','nif'=>'5555555');
$v_usr[] = array('foto'=>'Jose.jpg','nif'=>'66666666');
echo "Vector antes de eliminar duplicados";
print_r($v_usr);
echo "Vector despues";
print_r(elimina_duplicados($v_usr,'nif'));
?>

Lo dijo Ari, el Mayo 22 2008 @ 13:38
Ya que me pongo asquerosamente pedante con el mac, ahora voy a ponerme igual con el Java. Pido perdon por anticipado. :p
En un lenguaje de programacion DE VERDAD se haria con una sola linea:
function Collection eliminaDuplicados(Collection listaOriginal){
return new HashSet(listaOriginal);
}
Lo dijo acatos, el Mayo 22 2008 @ 14:54
Bueno, no se si se entendió bien cual era el problema, lo cierto es que volviendolo a leer creo que no está claro.
No se trata de eliminar las tuplas duplicadas de un array. En php se crea un array con tuplas únicas con la funcion array_unique. En una sola linea tambien
El planteamiento que soluciona la funcion del post es el siguiente, tienes un campo a3 en un array, si para dos tuplas t1 y t2, el valor del campo a3 es el mismo. Consideraremos que esas dos tuplas son duplicadas. Cualesquiera que sean los valores de los otros campos de esas tuplas.
HashSet efectivamente se refiere a conjuntos, y en un conjunto no puede haber valores duplicados. Pero las dos tuplas de las que te hablé antes no serían consideradas duplicadas.
Podrías crear un objeto HashSet, donde en mi script llamo a array_unique.
Corrigeme si me equivoco, me encanta equivocarme
Lo dijo Ari, el Mayo 23 2008 @ 9:38
lo siento no entendi nada, me da que hoy estoy muy espeso, ya se sabe, uno de esos dias (me estoy peleando con una aplicacion que se supone que debe ser multinavegador). :´( podrias enseñarme el resultado de la ejecucion de ese codigo a ver si pillo a lo que te refieres? thanks.
Lo dijo acatos, el Mayo 23 2008 @ 10:14
El vector origen es
((‘foto’=>’Pepe1.jpg’,'nif’=>’222222′),
(‘foto’=>’Pepe2.jpg’,'nif’=>’222222′),
(‘foto’=>’Julian.jpg’,'nif’=>’3333333′),
(‘foto’=>’Miguel.jpg’,'nif’=>’4444444′),
(‘foto’=>’Marcos.jpg’,'nif’=>’5555555′),
(‘foto’=>’Jose.jpg’,'nif’=>’66666666′))
y el resultado
((‘foto’=>’Pepe1.jpg’,'nif’=>’222222′),
(‘foto’=>’Julian.jpg’,'nif’=>’3333333′),
(‘foto’=>’Miguel.jpg’,'nif’=>’4444444′),
(‘foto’=>’Marcos.jpg’,'nif’=>’5555555′),
(‘foto’=>’Jose.jpg’,'nif’=>’66666666′))
Solo el nif debe ser unico para todas las tuplas, el nombre de la foto da igual y cualquier otro campo.
El vector que se le pasa a la funcion tiene la estructura
vector {
subvector1 {foto, nif},
subvector2 {foto, nif},
subvector3 {foto, nif},
.
.
.
}
Lo dijo Ari, el Mayo 23 2008 @ 11:37
A ver, voy a intentar eliminar toda la cerveza que aun hay en mi organismo y a ver si lo entendi bien:
entonces tienes un array de arrays(mas bien de Maps en terminologia Java) y quieres hacer unico el valor de una de las keys de esos submaps ¿es asi? (bueno creo q no termino de entender bien lo q acabo de escribir)
P.D: puto firefox.
Lo dijo acatos, el Mayo 23 2008 @ 11:50
Así es
PD: ¿Te has vuelto rubio? ¿Se te ha tornado el iris de color azul? ¿Qué haces bebiendo cerveza? Espero que la proxima vez que te vengas no rechaces las jarras que te ofrezca :p Hay vida más allá del arehucas.
Lo dijo Ari, el Mayo 23 2008 @ 12:01
jajaja hombre era un amigo mejicano que le habian dado la nacionalidad española y fuimos a celebrarlo a un sitio mejicano(que ironia) y claro alli bebiamos coronita, ademas era Jueves no nos podian dar las “tequila en punto”.
P.D.D: Por cierto ahora q me acuerdo, a ver cuando se dejan ver por los Madriles