valores valor repetidos obtener multidimensional indice index for eliminar elementos duplicados contar comparar array php arrays

repetidos - ¿Cómo detectar valores duplicados en PHP array?



obtener el valor de un array php (10)

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 poner los resultados. Por ejemplo, dado el siguiente conjunto:

$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.

Micro


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 un elemento está duplicado, por lo que no está respondiendo directamente la pregunta, pero espero que ayude a alguien en mi situación.

function findDuplicates($array1,$array2) { $combined = array_merge($array1,$array2); $counted = array_count_values($combined); $dupes = []; $keys = array_keys($counted); foreach ($keys as $key) { if ($counted[$key] > 1) {$dupes[] = $key;} } sort($dupes); return $dupes; } $array1 = [1,2,3,4,5]; $array2 = [4,5,6,7,8]; $dupes = findDuplicates($array1,$array2); print_r($dupes);

Productos:

Array ( [0] => 4 [1] => 5 )


Para deshacerse, use array_unique() . Para detectar si tiene uso count(array_unique()) y comparar para count($array) .


Podría tratar de convertir esa matriz en una matriz asociativa con las frutas como claves y el número de ocurrencias como valores. Un poco largo, pero parece que:

$array = array(''apple'', ''orange'', ''pear'', ''banana'', ''apple'', ''pear'', ''kiwi'', ''kiwi'', ''kiwi''); $new_array = array(); foreach ($array as $key => $value) { if(isset($new_array[$value])) $new_array[$value] += 1; else $new_array[$value] = 1; } foreach ($new_array as $fruit => $n) { echo $fruit; if($n > 1) echo "($n)"; echo "<br />"; }


Puede usar la función array_count_values

$array = array(''apple'', ''orange'', ''pear'', ''banana'', ''apple'', ''pear'', ''kiwi'', ''kiwi'', ''kiwi''); print_r(array_count_values($array));

saldrá

Array ( [apple] => 2 [orange] => 1 [pear] => 2 etc... )


Rellenarlos en un map (pseudocódigo)

map[string -> int] $m foreach($word in $array) { if(!$m.contains($word)) $m[$word] = 0; $m[$word] += 1; }


Tal vez algo como esto (código no probado, pero debe darle una idea)?

$new = array(); foreach ($array as $value) { if (isset($new[$value])) $new[$value]++; else $new[$value] = 1; }

Luego obtendrá una nueva matriz con los valores como claves y su valor es la cantidad de veces que existieron en la matriz original.


$count = 0; $output =''''; $ischeckedvalueArray = array(); for ($i=0; $i < sizeof($array); $i++) { $eachArrayValue = $array[$i]; if(! in_array($eachArrayValue, $ischeckedvalueArray)) { for( $j=$i; $j < sizeof($array); $j++) { if ($array[$j] === $eachArrayValue) { $count++; } } $ischeckedvalueArray[] = $eachArrayValue; $output .= $eachArrayValue. " Repated ". $count."<br/>"; $count = 0; } } echo $output;


<?php $arr = array(1, 2, 3, 2, 5, 6, 7); print_r(array_count_values($arr)); ?>


function array_not_unique( $a = array() ) { return array_diff_key( $a , array_unique( $a ) ); }


if(count(array_unique($array))<count($array)) { // Array has duplicates } else { // Array does not have duplicates }