Estoy trabajando con una matriz unidimensional en PHP. Me gustaría detectar la presencia de valores duplicados, luego contar el número de valores duplicados y sacar los resultados. Por ejemplo, dada la siguiente matriz:
$array = array('apple', 'orange', 'pear', 'banana', 'apple',
'pear', 'kiwi', 'kiwi', 'kiwi');
Me gustaría imprimir:
apple (2)
orange
pear (2)
banana
kiwi (3)
¿Algún consejo sobre cómo abordar este problema?
Gracias.
Miguel
fuente
array_unique($array, SORT_REGULAR)
obliga a PHP a verificar los elementos normalmente sin cambiar el tipo, pero es una comparación imprecisa. Por lo tanto, las diferentes instancias de una clase con el mismo contenido serán unificadas.fuente
return array_values(array_unique(array_diff_key($a, array_unique($a))));
Puede intentar convertir esa matriz en una matriz asociativa con las frutas como claves y el número de ocurrencias como valores. Un poco prolijo, pero parece:
fuente
array_count_values
Para deshacerse del uso
array_unique()
. Para detectar si tiene algún usocount(array_unique())
y compararlocount($array)
.fuente
Guárdelos en un
map
(pseudocódigo)fuente
¿Quizás algo como esto (código no probado pero debería darte una idea)?
Luego, obtendrá una nueva matriz con los valores como claves y su valor es la cantidad de veces que existieron en la matriz original.
fuente
array_count_values
fuente
No encontré la respuesta que estaba buscando, así que escribí esta función. Esto creará una matriz que contiene solo los duplicados entre las dos matrices, pero no imprime la cantidad de veces que se duplica un elemento, por lo que no responde directamente a la pregunta, pero espero que ayude a alguien en mi situación.
Salidas:
fuente
Un método sencillo:
fuente