如何计算数组中重复项的出现次数

muk*_*van 44 php arrays count

我想计算数组中每个重复项的出现次数,最后得到一个只有唯一/非重复项的数组及其各自的出现次数.

这是我的代码; 但我不会在哪里出错!

<?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})
?>    
Run Code Online (Sandbox Code Playgroud)

Roc*_*mat 131

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);
Run Code Online (Sandbox Code Playgroud)

结果:

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

  • 然后使用array_keys($ array)获取所需的输出数组; PS你们都需要处理你的变量命名 (3认同)

for*_*erg 9

最简单的解决方案(这就是 PHP 的魅力所在) -仅重复

$r = array_filter(array_count_values($array), function($v) { return $v > 1; });
Run Code Online (Sandbox Code Playgroud)

并检查:

print_r($r);
Run Code Online (Sandbox Code Playgroud)

结果$r

[43] => 6
[21] => 2
[78] => 2
Run Code Online (Sandbox Code Playgroud)


Sam*_*m T 6

如果你想尝试没有'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);
?>
Run Code Online (Sandbox Code Playgroud)

  • @KrishnaJonnalagadda 它只是抑制警告。 (2认同)

PHZ*_*zon 5

如果你有一个多维数组,你可以在 PHP 5.5+ 上使用:

array_count_values(array_column($array, 'key'))
Run Code Online (Sandbox Code Playgroud)

返回例如

 [
   'keyA' => 4,
   'keyB' => 2,
 ]
Run Code Online (Sandbox Code Playgroud)