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
)