2012-11-29 17 views
27

Chciałbym policzyć wystąpienie każdego zduplikowanego elementu w tablicy i skończyć z tablicą tylko unikatowych/nie duplikatów elementów z ich odpowiednimi wystąpieniami.Jak liczyć występowanie zduplikowanych elementów w tablicy

Oto mój kod; ALE nie wiem gdzie idę źle!

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

możliwe duplikat [Jak wykryć zduplikowane wartości z tablicy PHP?] (Http://stackoverflow.com/questions/1170807/how-to-detect-duplicate-values-in-php-array) – m2j

Odpowiedz

92

array_count_values, cieszyć :-)

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

Wynik:

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

następnie array_keys ($ array), aby uzyskać pożądaną tablicę wyjściową; PS wszyscy musicie pracować nad zmienną nazwą –

3

I rzeczywiście napisał niedawno, że funkcja będzie sprawdzał podciąg w tablicy, która będzie przydatna w ta sytuacja.

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

Jest magiczna funkcja PHP oferuje Państwu nazywany in_array().

Korzystanie części kodu będziemy modyfikować pętlę w następujący sposób:

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

jeśli chcesz spróbować bez 'array_count_values' można zrobić z inteligentny sposób tutaj

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

Hi Sam T.Podoba mi się twoja metoda, jak to zrobić w inteligentny sposób. Czy możesz wyjaśnić mi @ $ count_values ​​[$ a] ++; co @ reprezentować i co robi, Dzięki – whoami

0

Przyszedłem tutaj z Google szuka sposobu na zliczenie występowania zduplikowanych elementów w tablicy. Oto sposób to zrobić po prostu:

$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 

Jak array_unique() działa?

Zawiera wszystkie duplikaty. ex: Powiedzmy mamy tablicę następująco -

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

Kiedy robisz $cars = array_unique($cars); samochody będą miały tylko następujące elementy. $cars = array([0]=>"lambo", [1]=>"ferrari", [2]=>"Lotus", [4]=>"Bugatti");

Aby dowiedzieć się więcej: https://www.w3schools.com/php/func_array_unique.asp

nadzieję, że jest pomocne dla tych, którzy przybywają tutaj z google szuka sposobu liczenia zduplikowanych wartości w tablicy.

0

Można również używać go z adnotacjami tablicy, u dostać wiele duplikatów prawidłowo, ale PHP pokazuje

Ostrzeżenie: array_count_values ​​(): Może liczyć tylko ciąg i INTEGER wartości!

$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 
    ) 
Powiązane problemy