2013-11-15 24 views
0

我有一個$array,我想計算存儲在$i->x->y中的數字從1到10的頻率。多維數組中的Php計數頻率

我做

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

也許使用自定義回調的array_walk來計算1-10次出現的次數 –

回答

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

希望幫助您解決一些。

+0

謝謝。 '$ counts'數組將更容易處理。 – Wistar

0

我做了使用具有計數器對每個號碼的頻率陣列的測試從1到零

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

如果不正是你只需要發佈您的代碼,然後我可以提供幫助。 乾杯