2010-09-11 11 views
10

En primer lugar, me gustaría señalar a todos los buscadores de preguntas duplicados que this question no responde completamente mi pregunta.¿Cómo puedo eliminar TODOS los duplicados de una matriz en PHP?

Ahora, tengo una matriz. Diremos que la matriz es array(1, 2, 2, 3, 4, 3, 2)

Necesito eliminar los duplicados. No sólo uno de los duplicados, pero todo , por lo que el resultado será array(1, 4)

Miré array_unique(), pero que sólo dará lugar a array(1, 2, 3, 4)

¿Alguna idea?

+0

se podría eliminar la ambigüedad de su pregunta cambiándola a: "¿Cómo puedo eliminar duplicados, _y los valores duplicated_, de una matriz ? " – systemovich

Respuesta

12

Usted podría utilizar la combinación de array_unique, array_diff_assoc y array_diff:

array_diff($arr, array_diff_assoc($arr, array_unique($arr))) 
+0

+1 por ingenio, ¡aunque es difícil leer el intento cuando ves una línea así! –

+0

esto es significativamente más lento que el enfoque de Ciprian, solo hice un punto de referencia rápido y esto es 4 veces más lento. Un poco sorprendente. –

7

function removeDuplicates($array) { 
    $valueCount = array(); 
    foreach ($array as $value) { 
     $valueCount[$value]++; 
    } 

    $return = array(); 
    foreach ($valueCount as $value => $count) { 
     if ($count == 1) { 
     $return[] = $value; 
     } 
    } 

    return $return; 
} 
+0

El primer ciclo podría reemplazarse de manera más eficiente por $ arrayCount = array_count_values ​​($ array) –

+0

¡Pero +1 a usted, y bienvenido a Stack Overflow! –

+0

Gracias. Creo que el algoritmo también es importante. Alguien ya ha publicado una solución usando funciones PHP nativas. –

Cuestiones relacionadas