使用PHP计算Array中特定值的出现次数

时间:2011-05-10 04:36:05

标签: php arrays

我正在尝试找到一个本机PHP函数,它允许我计算数组中特定值的出现次数。我熟悉array_count_values()函数,但它返回数组中所有值的计数。是否有一个函数允许您传递值并返回该特定值的实例计数?例如:

$array = array(1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7);

$instances = some_native_function(6, $array);  //$instances will be equal to 4

我知道如何创建自己的功能,但为什么要重新发明轮子呢?

6 个答案:

答案 0 :(得分:42)

function array_count_values_of($value, $array) {
    $counts = array_count_values($array);
    return $counts[$value];
}

不是原生,但是来吧,这很简单。 ; - )

可替换地:

echo count(array_filter($array, function ($n) { return $n == 6; }));

或者:

echo array_reduce($array, function ($v, $n) { return $v + ($n == 6); }, 0);

或者:

echo count(array_keys($array, 6));

答案 1 :(得分:12)

此解决方案可能接近您的要求

$array = array(1, 2, 3, 3, 3, 4, 4, 5, 6, 6, 6, 6, 7);
print_r(array_count_values($array));

Result:

Array
( [1] => 1 ,[2] => 1 , [3] => 3, [4] => 2,[5] =>1, [6] => 4, [7] => 1 )

代表details

答案 2 :(得分:10)

从PHP 5.4.0开始,您可以对[6]生成的数组的索引array_count_values()使用函数数组解除引用:

$instances = array_count_values($array)[6]; //$instances will be equal to 4

答案 3 :(得分:4)

假设我们有以下数组:

     $stockonhand = array( "large green", "small blue", "xlarge brown", "large green", "medieum yellow", "xlarge brown",  "large green");

1)将此功能复制并粘贴到页面顶部。

    function arraycount($array, $value){
    $counter = 0;
    foreach($array as $thisvalue) /*go through every value in the array*/
     {
           if($thisvalue === $value){ /*if this one value of the array is equal to the value we are checking*/
           $counter++; /*increase the count by 1*/
           }
     }
     return $counter;
     }

2)接下来你需要做的就是每次想要计算任何数组中的任何特定值时应用该函数。例如:

     echo arraycount($stockonhand, "large green"); /*will return 3*/

     echo arraycount($stockonhand, "xlarge brown"); /*will return 2*/

答案 4 :(得分:0)

说我有这样的数组:

$array = array('', '', 'other', '', 'other');

$counter = 0;
foreach($array as $value)
{
  if($value === '')
    $counter++;
}
echo $counter;

这给出了次数' '在数组中重复

答案 5 :(得分:0)

这正是您要寻找的

<?php
 $MainString = 'Yellow Green Orange Blue Yellow Black White Purple';
 $FinderString = 'Yellow Blue White';
 $mainArray = explode(" ", $MainString);
 $findingArray = explode(" ", $FinderString);
 $count = 0;
 $eachtotal = array_count_values($mainArray);
 foreach($findingArray as $find){

    $count += $eachtotal[$find];
 }
 echo $count;


?>