我想编写一个返回计数器数组的函数。也就是说,给定一个整数数组$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
答案 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