如何计算数组中的重复值?

时间:2017-04-10 23:50:50

标签: php

我有一系列用户数据,每个用户数据都是逗号分隔值的列表,例如italian, english。首先,我想列出它们中的每一个,并且它很好并且有效。但是这些值可以重复,但我还是可以知道重复值的数量,以便能够说:American = 2。下面的代码显示了我

Duplicates count: 5

但实际上我应该只有2个副本,我可以从管理面板中看到

$stack = array();
$blogusers = get_users( 'orderby=nicename&role=author' );
foreach ( $blogusers as $user ) {
    $descTokens = explode(',', $user->user_description);
    $stack = array_merge($stack, $descTokens);
}
$count_values = array();
foreach ($stack as $a) {
    @$count_values[$a]++;
}
echo 'Duplicates count: '.count($count_values);

如果我print_r($count_values)我得到了

Array ( [francese] => 1 [ matematica] => 2 [ inglese] => 1 [fisica] => 1 [ latino] => 1 ) Duplicates count: 5

那些不是重复的字符串

3 个答案:

答案 0 :(得分:1)

//Count of the duplicate array values 
$count = count(array_count_values($stack));
echo $count;

答案 1 :(得分:1)

在代码末尾添加此内容,只在$ count_values

中包含重复内容
$total_duplicates = 0;
foreach ($count_values as $key=>$count) {
    if($count<=1){
        unset($count_values[$key]);
    }else{
        $total_duplicates += $count;
    }
}

这将通过unset()删除任何不重复的条目(发生一次)。 $ total_duplicates也会给你重复的总数。

以html的形式输出:

echo '<p>You have '.$total_duplicates.' duplicates.</p>';
foreach ($count_values as $key=>$count) { 
    echo '<li>'.$key.' '.$count.'</li>'; 
}

答案 2 :(得分:1)

使用array_count_values(),您将获得与辅助foreach循环相同的输出。根据你的例子,count()给你5 - francese,matematica,inglese,fisica和latino将是至少有1作为值的条目并且每个被计为一个(通过你的例子,索引& #39; matematica&#39;将保持值2而不是1,因为它是重复的并且出现两次,但仍将被计为一个)。

因此,如果您过滤掉一次出现的所有值,那么您应该得到您正在寻找的内容。将array_map()与回调一起使用,删除所有一个或更少的值就像这样

foreach ($blogusers as $user) {
    $descTokens = explode(',', $user->user_description);
    $stack = array_merge($stack, $descTokens);
}
echo array_sum(array_map((function ($v) { return $v > 1 ? $v : 0; }), array_count_values($stack)));

Live demo

如果您想要一个只显示多次值的数组,可以将array_sum()替换为array_filter()(返回一个数组,以便您不再直接回显它)

print_r(array_filter(array_map((function ($v) { return $v > 1 ? $v : 0; }), array_count_values($stack))));

输出

Array (  
    [twice] => 2  
)

请参阅https://3v4l.org/WOObc了解相关工作示例。