PHP中的计数器数组


Counter Array in PHP

我想写一个返回计数器数组的函数。也就是说,给定整数的数组$A,其中整数在范围(0...$m)内,它应该返回大小为$m + 1的数组,其中每个索引具有该索引号在$A中的出现次数。

例如,如果:

$A = array(1, 4, 2, 2, 4, 2);
$m = 4;

它应该输出:

array(0, 1, 3, 0, 2)

我想知道PHP中是否有一个内置函数可以做到这一点。

在python中,它看起来像:

def counting(A, m):
    n = len(A)
    count = [0] * (m + 1)
    for k in xrange(n):
        count[A[k]] += 1
    return count

你可以试试这个:

$a = array(1, 4, 2, 2, 4, 2);
$m = 4;
function counting(Array $a, $m){
    // Create our result array
    $result = array();
    // Make sure m is an integer for version before PHP 7, otherwise return an empty array
    if(!is_int($m))
        return $result;
    // Get the count of each occurence in the array
    $counts = array_count_values($a);
    // Loop through each number of m
    for($i=0; $i<=$m; $i++)
        $result[$i] = isset($counts[$i]) ? $counts[$i] : 0;
    return $result;
}

var_dump(counting($a, $m)):的结果

array(5) {
    [0]=>
        int(0)
    [1]=>
        int(1)
    [2]=>
        int(3)
    [3]=>
        int(0)
    [4]=>
        int(2)
}

尝试以下代码

function count_array($array,$m){
   // count values
   $count_values = array_count_values($array);
   // loop for $m times
   for($i=0;$i<=$m;$i++){
       // check if there exits a key in the array
       if(array_key_exists($i,$count_values)){
           $result_array[$i] = $count_values[$i];
       }else{
           $result_array[$i] = 0;
       }
    }
    return $result_array;
}
$A = array(1, 4, 2, 2, 4, 2);
$m = 4;
$result = count_array($A,$m);

输出:

Array
(
[0] => 0
[1] => 1
[2] => 3
[3] => 0
[4] => 2
)

新版本:

$result = array_replace(array_fill(0, $m+1, 0),
                        array_slice(array_count_values($A), 0, $m-1, true));
  • 将长度为$m+1的零数组替换为$A$m的值计数

原始版本:

$result = array_fill(0, $m+1, 0);
foreach($A as $i) {
    if(isset($result[$i])) {
        $result[$i]++;
    }
}
  • 创建长度为$m+1的零的$result数组
  • 循环数组$A并递增$A值的$result索引

显然,如果你想要一个函数,只需将代码包装在:

function counting($A, $m) {
    //code
    return $result;
}