我有一系列用户数据,每个用户数据都是逗号分隔值的列表,例如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
那些不是重复的字符串
答案 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)));
如果您想要一个只显示多次值的数组,可以将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了解相关工作示例。