¿Cómo puedo quitar valores duplicados de un array en PHP?

InformationsquelleAutor Ian | 2008-11-21

23 Comentarios

  1. 226

    Uso array_unique().

    Ejemplo:

    $array = array(1, 2, 2, 3);
    $array = array_unique($array); //Array is now (1, 2, 3)
    • que array_unique() no está diseñado para funcionar en múltiples dimensiones de las matrices.
    • Lo anterior, conservando los elementos claves. Si desea volver a indexar, además de aplicar array_values: php.net/manual/en/function.array-values.php
    • Esto no funciona para mí por favor use: $array = array_unique($array, SORT_REGULAR);
    • Gracias por destacar en la sección de comentarios. Se guarda mucho tiempo para mí.
  2. 21
    //Find duplicates 
    
    $arr = array( 
        'unique', 
        'duplicate', 
        'distinct', 
        'justone', 
        'three3', 
        'duplicate', 
        'three3', 
        'three3', 
        'onlyone' 
    );
    
    $unique = array_unique($arr); 
    $dupes = array_diff_key( $arr, $unique ); 
        //array( 5=>'duplicate', 6=>'three3' 7=>'three3' )
    
    //count duplicates
    
    array_count_values($dupes); //array( 'duplicate'=>1, 'three3'=>2 )
  3. 19

    Uso array_values(array_unique($array));

    array_unique: por única matriz
    array_values: para indexar

    • +1 array_unique devuelve un objeto con los pares clave / valor Y array_values devolver sólo los valores de una matriz.
  4. 6
    $result = array();
    foreach ($array as $key => $value){
      if(!in_array($value, $result))
        $result[$key]=$value;
    }
  5. 5

    a veces array_unique() no es el camino,
    si desea obtener únicos Y elementos duplicados

    $unique=array("","A1","","A2","","A1","");
    $duplicated=array();
    
    foreach($unique as $k=>$v) {
    
    if( ($kt=array_search($v,$unique))!==false and $k!=$kt )
     { unset($unique[$kt]);  $duplicated[]=$v; }
    
    }
    
    sort($unique); //optional
    sort($duplicated); //optional

    resultados en

    array ( 0 => '', 1 => 'A1', 2 => 'A2', ) /* $unique */
    
    array ( 0 => '', 1 => '', 2 => '', 3 => 'A1', ) /* $duplicated */
  6. 2

    explode(",", implode(",", array_unique(explode(",", $YOUR_ARRAY))));

    Esto se hará cargo de asociaciones de clave y serializar las claves para el resultado de la nueva matriz 🙂

    • ¿Cuál sería el efecto de explode("," $YOUR_ARRAY) cuando $YOUR_ARRAY es array("1", "2", "3")?
    • y la respuesta es: Advertencia: la función explode() espera parámetro 2 para ser string, array dado en … en línea ….
    • Sí, este era el punto, pero nadie se dio cuenta que el código, al parecer.
  7. 2

    Dependiendo del tamaño de la matriz, he encontrado

    $array = array_values( array_flip( array_flip( $array ) ) );

    puede ser más rápido que array_unique.

    • Más información sobre lo que está pasando aquí y sería más rápido con un mayor o menor de la matriz.
    • El doble flip va a quitar valores duplicados, porque la clave no pueden existir dos veces, de lo contrario se sobrescribe. Si cualquier valor se duplica y el de la matriz, se voltea, la última aparición (supongo) será el valor de la clave.
    • En PHP 7 me he dado cuenta de lanzar una matriz multidimensional más de una vez puede reordenar los elementos de la matriz de forma inesperada.
  8. 2

    Podemos crear este tipo de matriz para el uso de este último valor se actualizará en la columna o el valor de la clave y nos pondremos en valor único de la matriz…

    $array = array (1,3,4,2,1,7,4,9,7,5,9);
        $data=array();
        foreach($array as $value ){
    
            $data[$value]= $value;
    
        }
    
        array_keys($data);
        OR
        array_values($data);
  9. 1

    Que es una gran manera de hacerlo. Desea asegurarse de que su salida es de nuevo una matriz de nuevo. Ahora sólo estás mostrando el último valor único.

    Intente esto:

    $arrDuplicate = array ("","",1,3,"",5);
    
    foreach (array_unique($arrDuplicate) as $v){
      if($v != "") { $arrRemoved[] = $v; }
    }
    print_r ($arrRemoved);
  10. 1
        if (@!in_array($classified->category,$arr)){        
                                        $arr[] = $classified->category;
                                     ?>
    
                <?php } endwhile; wp_reset_query(); ?>

    primera vez, compruebe el valor en la matriz y se encontró mismo valor ignorar

  11. 1

    Quitar valores duplicados de un array asociativo en PHP.

    $arrDup = Array ('0' => 'aaa-aaa' , 'SKU' => 'aaa-aaa' , '1' => '12/1/1' , 'date' => '12/1/1' , '2' => '1.15' , 'cost' => '1.15' );
    
    foreach($arrDup as $k =>  $v){
      if(!( isset ($hold[$v])))
          $hold[$v]=1;
      else
          unset($arrDup[$k]);
    }

    Array ( [0] => aaa-aaa [1] => 12/1/1 [2] => 1.15 )

  12. 1

    Puede haber varias maneras de hacer estos, que son como sigue

    //first method
    $filter = array_map("unserialize", array_unique(array_map("serialize", $arr)));
    
    //second method
    $array = array_unique($arr, SORT_REGULAR);
  13. 1

    Si la preocupación en funcionamiento y tienen una matriz simple, uso:

    array_keys(array_flip($array));

    Es muchas veces más rápido que array_unique.

  14. 1
    $a = array(1, 2, 3, 4); 
    $b = array(1, 6, 5, 2, 9); 
    $c = array_merge($a, $b);
    $unique = array_keys(array_flip($c));
    print_r($unique);
    • La forma más rápida de lograr esto es utilizar el array_flip función integrada en PHP[1]. array_flip cambiarán los valores de la matriz con sus claves y desde una matriz puede tener un duplicado de las llaves que usted va a terminar con un único conjunto de teclas que corresponden a los valores de la matriz original. Para recuperar estas teclas como valores que puede utilizar el array_keys función para recuperar sus valores únicos. Ambos array_flip y array_keys son el peor caso O(n), mientras que las funciones array_unique tiene un peor caso de O(n log(n)).[2]
    • Por favor, añadir un poco más de explicación a su respuesta (no a la sección de comentarios!). ¿Cómo funciona el código quitar valores duplicados de una único array? Por qué se necesitan dos matrices para que?
    • Bienvenido a StackOverflow! Veo que has añadido alguna explicación en los comentarios de tu respuesta, sería de gran ayuda si se agrega esta información como parte de su respuesta en sí.
    • Parece más razonable para añadir ese comentario como una edición a la ya larga respuesta existente (stackoverflow.com/a/52591730/2109067).
    • Usted puede utilizar sola matriz con elementos duplicados. Yo tenía el problema de obtener valores a partir de dos matrices en una sola, a continuación, eliminar los duplicados.
  15. 0
    $arrDuplicate = array ("","",1,3,"",5);
     foreach(array_unique($arrDuplicate) as $v){
      if($v != "" ){$arrRemoved = $v;  }}
    print_r($arrRemoved);
    • Chicos esta sería una forma más inteligente de eliminación de duplicados……….
    • Esto realmente no explica nada, y no parece ser «más inteligentes».
    • Siempre se puede explicar por qué editando su propio post, simplemente haga clic en el enlace «editar» al final de su respuesta. También le sugiero que eche un vistazo a las FAQ : stackoverflow.com/faq
  16. 0
    function arrayUnique($myArray)
    {
        $newArray = Array();
        if (is_array($myArray))
        {
            foreach($myArray as $key=>$val)
            {
                if (is_array($val))
                {
                    $val2 = arrayUnique($val);
                }
                else
                {
                    $val2 = $val;
                    $newArray=array_unique($myArray);
                    $newArray=deleteEmpty($newArray);
                    break;
                }
                if (!empty($val2))
                {
                    $newArray[$key] = $val2;
                }
            }
        }
        return ($newArray);
    }
    
    function deleteEmpty($myArray)
    {
        $retArray= Array();
        foreach($myArray as $key=>$val)
        {
            if (($key<>"") && ($val<>""))
            {
                $retArray[$key] = $val;
            }
        }
        return $retArray;
    }
  17. 0

    probar este corto & sweet código

    $array = array (1,4,2,1,7,4,9,7,5,9);
    $unique = array();
    
    foreach($array as $v){
      isset($k[$v]) || ($k[$v]=1) && $unique[] = $v;
      }
    
    var_dump($unique);

    De salida –

    array(6) {
      [0]=>
      int(1)
      [1]=>
      int(4)
      [2]=>
      int(2)
      [3]=>
      int(7)
      [4]=>
      int(9)
      [5]=>
      int(5)
    }
    • Puede que me explique, cómo este código funciona?
    • Abusar de los operadores booleanos para el flujo de control como este es innecesariamente confuso. Sólo uso if.
  18. 0
    <?php
    $arr1 = [1,1,2,3,4,5,6,3,1,3,5,3,20];    
    print_r(arr_unique($arr1));
    
    
    function arr_unique($arr) {
      sort($arr);
      $curr = $arr[0];
      $uni_arr[] = $arr[0];
      for($i=0; $i<count($arr);$i++){
          if($curr != $arr[$i]) {
            $uni_arr[] = $arr[$i];
            $curr = $arr[$i];
          }
      }
      return $uni_arr;
    }
    • Poner count($arr) en el circuito es bastante lento
  19. 0

    Aquí he creado una segunda matriz vacía y se utiliza for bucle con la primera matriz que es tener duplicados. Se ejecutará tantas veces como el número de la primera matriz. A continuación, en comparación con la posición de la matriz con la primera matriz y coincidentes que tiene este elemento ya o no mediante el uso de in_array. Si no, entonces voy a agregar ese elemento a la segunda matriz con array_push.

    $a = array(1,2,3,1,3,4,5);
    $count = count($a);
    $b = [];
    for($i=0; $i<$count; $i++){
        if(!in_array($a[$i], $b)){
            array_push($b, $a[$i]);
        }
    }
    print_r ($b);
    • Se puede compartir alguna explicación acerca de que el código? Por ejemplo, ¿por qué no utilizar un foreach bucle?
    • Esta es una especie de forma de hacer y por qué yo no uso foreach porque estoy mucho más cómodos con el bucle for. Eso es todo.
    • Sin embargo, usted debe compartir alguna explicación con el código. La publicación de dichas respuestas en por LO tanto no es un buen estilo: las personas con el mismo problema que el OP podría venir, y que debe ser capaz de entender cómo el código resuelve el problema que se puede aprender de él y adaptarlo a sus necesidades
  20. 0

    Se puede hacer a través de la función he hecho tres de la función duplicar devuelve los valores que se han duplicado en la serie.

    Segunda función única de retorno de sólo aquellos valores que son solo significa que no se repite en la serie, tercera y completa de la función de devolución de todos los valores, pero no se duplica si cualquier valor se duplica convertir a una sola;

    function duplicate($arr) {
        $duplicate;
        $count = array_count_values($arr);
        foreach($arr as $key => $value) {
            if ($count[$value] > 1) {
                $duplicate[$value] = $value;
            }
        }
        return $duplicate;
    }
    function single($arr) {
        $single;
        $count = array_count_values($arr);
        foreach($arr as $key => $value) {
            if ($count[$value] == 1) {
                $single[$value] = $value;
            }
        }
        return $single;
    }
    function full($arr, $arry) {
        $full = $arr + $arry;
        sort($full);
        return $full;
    }
  21. 0
    $array = array("a" => "moon", "star", "b" => "moon", "star", "sky");
    
    //Deleting the duplicate items
    $result = array_unique($array);
    print_r($result);

    ref : Demo

    • ¿Cuál es el punto de responder a esta pregunta con array_unique 11 años después de la respuesta original que es exactamente esto ?
  22. -2

    He hecho esto sin el uso de cualquier función.

    $arr = array("1", "2", "3", "4", "5", "4", "2", "1");
    
    $len = count($arr);
    for ($i = 0; $i < $len; $i++) {
      $temp = $arr[$i];
      $j = $i;
      for ($k = 0; $k < $len; $k++) {
        if ($k != $j) {
          if ($temp == $arr[$k]) {
            echo $temp."<br>";
            $arr[$k]=" ";
          }
        }
      }
    }
    
    for ($i = 0; $i < $len; $i++) {
      echo $arr[$i] . " <br><br>";
    }
    • ¿por qué no utilizar array_unique($matriz).

Dejar respuesta

Please enter your comment!
Please enter your name here