我有一个$array
,我想计算$i->x->y
中存储的从1到10的数字的频率。
我做了
foreach($array as $i){
if($i->x->y == 1){
$a++;
}elseif ($i->x->y == 2){
$b++;
}elseif ($i->x->y == 3){
$c++;
}
...
array_push($count, $a, $b, $c);
我能做到这一点并且有效,但我确信有更优雅的方式来做到这一点。有array_count_values函数,但我不确定这是如何适用于这种情况的。
答案 0 :(得分:1)
我会启动第二个数组,它将密钥保存为您跟踪的数字,其值保存该数字的数量。例如:
$array = array(1,2,3,5,4,7,5,6,9,8,10,4,6,8,7,1,3,6,8,7,10,5,8,3);
$counts = array();
foreach($array as $i) {
if(array_key_exists($i, $counts)) {
$counts[$i]++;
} else {
$counts[$i] = 1;
}
}
执行var_dump($counts);
会产生这个:
array(10) {
[1]=>
int(2)
[2]=>
int(1)
[3]=>
int(3)
[5]=>
int(3)
[4]=>
int(2)
[7]=>
int(3)
[6]=>
int(3)
[9]=>
int(1)
[8]=>
int(4)
[10]=>
int(2)
}
希望能帮到你一些。
答案 1 :(得分:0)
我使用频率数组进行了测试,该数组与每个数字的计数器从1到0
// random numbers to validate
$rnd_arr = array();
// freq array
$freq;
// random numbers
for($i = 0; $i < 500; $i++) {
array_push($rnd_arr, rand(1, 10));
}
// initiate the counter for each number from 1 to 10
for ($i=1; $i < 10; $i++) {
# code...
$freq[(string) $i] = 0;
}
// check the frequency
for($i = 0; $i < 500; $i++) {
$freq[(string) $rnd_arr[$i]]+= 1;
}
print_r($freq);
// random output
Array ( [1] => 53 [2] => 61 [3] => 48 [4] => 68 [5] => 48 [6] => 40 [7] => 45 [8] => 56 [9] => 36 [10] => 45 )
如果它不是你需要的只是发布你的代码然后我可以帮助。 干杯