PHP中的计数器数组

时间:2016-05-06 18:38:56

标签: 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

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

$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)
}

答案 1 :(得分:0)

尝试以下代码

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);

Out Put:

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

答案 2 :(得分:0)

新版本:

$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]++;
    }
}
  • 创建长度为$result
  • $m+1个零数组
  • 循环数组$A并增加$result值<{1}}的索引

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

$A