values repeated occurrence example array_count_values array php arrays count

occurrence - php array count repeated values



¿Cómo cuento la aparición de elementos duplicados en una matriz? (9)

Me gustaría contar la ocurrencia de cada elemento duplicado en una matriz y terminar con una matriz de elementos únicos / no duplicados con sus respectivas ocurrencias.

Aquí está mi código; ¡PERO yo no adónde voy mal!

<?php $array = array(12,43,66,21,56,43,43,78,78,100,43,43,43,21); //$previous[value][Occurrence] for($arr = 0; $arr < count($array); $arr++){ $current = $array[$arr]; for($n = 0; $n < count($previous); $n++){ if($current != $previous[$n][0]){// 12 is not 43 -----> TRUE if($current != $previous[count($previous)][0]){ $previous[$n++][0] = $current; $previous[$n++][1] = $counter++; } }else{ $previous[$n][1] = $counter++; unset($previous[count($previous)-1][0]); unset($previous[count($previous)-1][1]); } } } //EXPECTED VALUES echo ''No. of NON Duplicate Items: ''.count($previous).''<br><br>'';// 7 print_r($previous);// array( {12,1} , {21,2} , {43,6} , {66,1} , {56,1} , {78,2} , {100,1}) ?>


Contar el elemento duplicado de una matriz en PHP sin usar la función incorporada

$arraychars=array("or","red","yellow","green","red","yellow","yellow"); $arrCount=array(); for($i=0;$i<$arrlength-1;$i++) { $key=$arraychars[$i]; if($arrCount[$key]>=1) { $arrCount[$key]++; } else{ $arrCount[$key]=1; } echo $arraychars[$i]."<br>"; } echo "<pre>"; print_r($arrCount);


De hecho, escribí una función recientemente que verificaría una subcadena dentro de una matriz que será útil en esta situación.

function strInArray($haystack, $needle) { $i = 0; foreach ($haystack as $value) { $result = stripos($value,$needle); if ($result !== FALSE) return TRUE; $i++; } return FALSE; } $array = array(12,43,66,21,56,43,43,78,78,100,43,43,43,21); for ($i = 0; $i < count($array); $i++) { if (strInArray($array,$array[$i])) { unset($array[$i]); } } var_dump($array);


Hay una función mágica que PHP le ofrece llamada in_array() .

Usando partes de tu código, modificaremos el ciclo de la siguiente manera:

<?php $array = array(12,43,66,21,56,43,43,78,78,100,43,43,43,21); $arr2 = array(); $counter = 0; for($arr = 0; $arr < count($array); $arr++){ if (in_array($array[$arr], $arr2)) { ++$counter; continue; } else{ $arr2[] = $array[$arr]; } } echo ''number of duplicates: ''.$counter; print_r($arr2); ?>


Puedes hacerlo usando el bucle Foreach.

$arrayVal = array(1,2,3,1,2,3,1,2,3,4,4,5,6,4,5,6,88); $set_array = array(); foreach ($array as $value) { $set_array[$value]++; } print_r($set_array);

Salida: -

Array( [1] => 3 [2] => 3 [3] => 3 [4] => 3 [5] => 2 [6] => 2 [88] => 1 )


Si tiene una matriz multidimensional, puede usar en PHP 5.5+ esto:

array_count_values(array_column($array, ''key''))

que devuelve, por ejemplo

[ ''keyA'' => 4, ''keyB'' => 2, ]


También puede usarlo con la matriz de elementos de texto, obtendrá el número de duplicados correctamente, pero PHP muestra

Advertencia: array_count_values ​​(): solo puede contar los valores de STRING e INTEGER.

$domains = array ( 0 => ''i1.wp.com'', 1 => ''i1.wp.com'', 2 => ''i2.wp.com'', 3 => ''i0.wp.com'', 4 => ''i2.wp.com'', 5 => ''i2.wp.com'', 6 => ''i0.wp.com'', 7 => ''i2.wp.com'', 8 => ''i0.wp.com'', 9 => ''i0.wp.com'' ); $tmp = array_count_values($domains); print_r ($tmp); array ( ''i1.wp.com'' => 2730, ''i2.wp.com'' => 2861, ''i0.wp.com'' => 2807 )


Vine aquí desde google buscando una forma de contar la ocurrencia de elementos duplicados en una matriz. Aquí está la manera de hacerlo simplemente:

$colors = array("red", "green", "blue", "red", "yellow", "blue"); $unique_colors = array_unique($colors); // $unique colors : array("red", "green", "blue", "yellow") $duplicates = count($colors) - count($unique_colors); // $duplicates = 6 - 4 = 2 if( $duplicates == 0 ){ echo "There are no duplicates"; } echo "No. of Duplicates are :" . $duplicates; // Output: No. of Duplicates are: 2

¿Cómo funciona array_unique ()?

Elementos todos los duplicados. ex: Digamos que tenemos una matriz de la siguiente manera:

$cars = array( [0]=>"lambo", [1]=>"ferrari", [2]=>"Lotus", [3]=>"ferrari", [4]=>"Bugatti");

Cuando haces $cars = array_unique($cars); los autos solo tendrán los siguientes elementos. $cars = array( [0]=>"lambo", [1]=>"ferrari", [2]=>"Lotus", [4]=>"Bugatti");

Para leer más: https://www.w3schools.com/php/func_array_unique.asp

Espero que sea útil para aquellos que vienen desde Google buscando una forma de contar los valores duplicados en el conjunto.


si quieres probar sin ''array_count_values'' puedes hacerlo de una manera inteligente aquí

<?php $input= array(12,43,66,21,56,43,43,78,78,100,43,43,43,21); $count_values = array(); foreach ($input as $a) { @$count_values[$a]++; } echo ''Duplicates count: ''.count($count_values); print_r($count_values); ?>


array_count_values , disfruta :-)

$array = array(12,43,66,21,56,43,43,78,78,100,43,43,43,21); $vals = array_count_values($array); echo ''No. of NON Duplicate Items: ''.count($vals).''<br><br>''; print_r($vals);

Resultado:

No. of NON Duplicate Items: 7 Array ( [12] => 1 [43] => 6 [66] => 1 [21] => 2 [56] => 1 [78] => 2 [100] => 1 )