Как подсчитать количество повторяющихся элементов в массиве

Я хотел бы подсчитать появление каждого повторяющегося элемента в массиве и в итоге получить массив только уникальных / не дублированных элементов с их соответствующими вхождениями.

Вот мой код; НО Я не делаю ошибку!

<?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}) ?> 

array_count_values , наслаждайтесь 🙂

 $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); 

Результат:

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

если вы хотите попробовать без 'array_count_values' вы можете сделать это с помощью умного пути здесь

 <?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); ?> 

Недавно я написал функцию, которая проверила бы подстроку в массиве, которая пригодится в этой ситуации.

 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); с 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); 

Существует волшебная функция PHP, предлагающая вам ее имя in_array () .

Используя части вашего кода, мы изменим цикл следующим образом:

 <?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); ?> 

Я пришел сюда из google, ища способ подсчета появления дубликатов в массиве. Вот как это сделать:

 $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 

Как работает array_unique ()?

Он объединяет все дубликаты. ex: Допустим, у нас есть массив следующим образом:

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

Когда вы делаете $cars = array_unique($cars); автомобили будут иметь только следующие элементы. $cars = array( [0]=>"lambo", [1]=>"ferrari", [2]=>"Lotus", [4]=>"Bugatti");

Чтобы узнать больше: https://www.w3schools.com/php/func_array_unique.asp

Надеюсь, это полезно тем, кто приезжает сюда из google, ища способ подсчета повторяющихся значений в массиве.

Вы также можете использовать его с массивом текстовых элементов, u получит количество дубликатов правильно, но PHP показывает

Предупреждение: array_count_values ​​(): Можно только учитывать значения STRING и 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 )