values valores unicos repetidos repeated remove objects eliminar elementos duplicados bidimensional array php arrays

valores - php devuelve solo entradas duplicadas de una matriz



php eliminar elementos duplicados array (6)

Esta es la forma correcta de hacerlo (distingue entre mayúsculas y minúsculas):

array_intersect($arr, array_unique(array_diff_key($arr, array_unique($arr))));

Y una solución que no distingue entre mayúsculas y minúsculas:

$iArr = array_map(''strtolower'', $arr); $iArr = array_intersect($iArr, array_unique(array_diff_key($iArr, array_unique($iArr)))); array_intersect_key($arr, $iArr);

Pero la respuesta de @Srikanth es más eficiente (en realidad, es la única que funciona correctamente además de esta).

Quiero recuperar todas las entradas duplicadas de una matriz. ¿Es esto posible en PHP?

array( 1 => ''1233'', 2 => ''12334'', 3 => ''Hello'', 4 => ''hello'', 5 => ''U'' );

Quiero devolver una matriz con solo el valor duplicado: "hola".

Matriz de salida deseada:

array( 1 => ''Hello'', 2 => ''hello'' );


Necesitará hacer que su función sea insensible a las mayúsculas para obtener el resultado "Hola" => "hola" que está buscando, pruebe este método:

$arr = array(1=>''1233'',2=>''12334'',3 =>''Hello'' ,4=>''hello'', 5=>''U''); // Convert every value to uppercase, and remove duplicate values $withoutDuplicates = array_unique(array_map("strtoupper", $arr)); // The difference in the original array, and the $withoutDuplicates array // will be the duplicate values $duplicates = array_diff($arr, $withoutDuplicates); print_r($duplicates);

La salida es:

Array ( [3] => Hello [4] => hello )

Editado por @AlixAxel:

Esta respuesta es muy engañosa. Sólo funciona en esta condición específica. Este contra-ejemplo:

$arr = array(1=>''1233'',2=>''12334'',3 =>''Hello'' ,4=>''HELLO'', 5=>''U'');

Falla miserablemente . Además, esta no es la manera de mantener duplicados:

array_diff($arr, array_unique($arr));

Dado que uno de los valores duplicados estará en array_unique , y luego se eliminará por array_diff .

Editar por @RyanDay:

Así que mire la respuesta de @Srikanth o @ Bucabay, que funciona para todos los casos (busque los que no distinguen mayúsculas y minúsculas en los de Bucabay), no solo los datos de prueba especificados en la pregunta.


Tratar:

$arr2 = array_diff_key($arr, array_unique($arr));

caso insensible:

array_diff_key($arr, array_unique(array_map(''strtolower'', $arr)));


function array_not_unique($raw_array) { $dupes = array(); natcasesort($raw_array); reset($raw_array); $old_key = NULL; $old_value = NULL; foreach ($raw_array as $key => $value) { if ($value === NULL) { continue; } if (strcasecmp($old_value, $value) === 0) { $dupes[$old_key] = $old_value; $dupes[$key] = $value; } $old_value = $value; $old_key = $key; } return $dupes; }

Lo que Srikanth (John) agregó pero con la comparación insensible al caso.


function get_duplicates ($array) { return array_unique( array_diff_assoc( $array, array_unique( $array ) ) ); }


<?php function array_not_unique($raw_array) { $dupes = array(); natcasesort($raw_array); reset($raw_array); $old_key = NULL; $old_value = NULL; foreach ($raw_array as $key => $value) { if ($value === NULL) { continue; } if (strcasecmp($old_value, $value) === 0) { $dupes[$old_key] = $old_value; $dupes[$key] = $value; } $old_value = $value; $old_key = $key; } return $dupes; } $raw_array = array(); $raw_array[1] = ''[email protected]''; $raw_array[2] = ''[email protected]''; $raw_array[3] = ''[email protected]''; $raw_array[4] = ''[email protected]''; // Duplicate $common_stuff = array_not_unique($raw_array); var_dump($common_stuff);