检查PHP数组中特定值重复出现的次数

19

我有一个名为$uid的数组。如何检查我的$uid数组中值为"12"的元素出现了多少次?

6个回答

33

有几种方法。

$cnt = count(array_filter($uid,function($a) {return $a==12;}));
或者
$tmp = array_count_values($uid);
$cnt = $tmp[12];

或任何其他方法。


1
如果计数为零,则array_count_values()不可靠,因为只有找到的值才会成为键。 - mickmackusa
@mickmackusa 怎么会不可靠呢?只需要做 $tmp[9999] ?? 0(如果找不到9999)就可以了,这样就没问题了。我不知道为什么你会回复每个人说它不可靠,只是因为键不存在。 - C Alex
我的评论旨在向不了解边缘情况的读者提供信息。是的,应该使用空值合并运算符。 - mickmackusa

12

可以使用 array_count_values() 函数。例如,

$freqs = array_count_values($uid);
$freq_12 = $freqs['12'];

array_count_values在这里不起作用。我不会使用... array_count_values($string) //或12作为$string - DobotJr
2
目前的PHP版本不允许在函数调用后使用[]符号。 - Hammerite
@Hammerite,那很愚蠢,已更正。 - Rafe Kettler
如果计数为零,则array_count_values()不可靠,因为只有找到的值才会成为键。 - mickmackusa

6
非常简单:
$uid= array(12,23,12,4,2,5,56);
$indexes = array_keys($uid, 12); //array(0, 1)
echo count($indexes);

2
这个问题有不同的解决方案:
$count = count(array_filter($uid, function($x) { return $x==12;}));

或者

array_reduce($uid, function($c, $v) { return $v + ($c == 12?1:0);},0)

或者只是一个for循环

for($i=0, $last=count($uid), $count=0; $i<$last;$i++)
    if ($uid[$i]==12) $count++;

或者使用foreach循环。
$count=0;
foreach($uid as $current)
    if ($current==12) $count++;

2
使用函数 array_count_values 来统计数组中每个值出现的次数。
$uid_counts = array_count_values($uid);
$number_of_12s = $uid_counts[12];

如果计数为零,则array_count_values()不可靠,因为只有找到的值才会成为键。 - mickmackusa

0
$repeated = array();
foreach($uid as $id){
    if (!isset($repeated[$id])) $repeated[$id] = -1;
    $repeated[$id]++;
}

这将导致例如

array(
   12 => 2
   14 => 1
)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接