2017-07-23 61 views
-1

對不起,我對本網站不熟悉,我不知道如何正確設置此問題的格式。 我有一個數組(),其中包含約6000項。例如,每個項目有3個屬性。如何通過多個鍵組合數組並將結果總結爲php

Item[1]user=>'user1', acct_num => '1', value => 32, 
Item[2]user=>'user1', acct_num => '1', value => 2, 
Item[3]user=>'user1', acct_num => '2', value => 32, 
Item[5]user=>'user1', acct_num => '2', value => 32, 
Item[6]user=>'user2', acct_num => '1', value => 312, 
Item[1]user=>'user2', acct_num => '1', value => 320, 

所以我想要得到的總USER1的與帳戶1在這個例子中是34,以及我需要的總USER1的與帳戶2,其是64再總結兩者總和是98然後劃分ACCT總數(94)。所以它將是34/98和64/98。我需要做的是與陣列中的所有項目

+0

你任何機會從數據庫中獲取呢? – peterm

+0

我從csv文件獲取數組 – dianesis

+0

我試圖避免數據庫。因爲最後我會將最後一個數組插入數據庫並將其導出爲xls – dianesis

回答

0

如果您不想利用你可以遍歷數據集,組數據庫,並計算平均值

$csv = [ 
    ['user' => 'user1', 'acct_num' => '1', 'value' => 32], 
    ['user' => 'user1', 'acct_num' => '1', 'value' => 2], 
    ['user' => 'user1', 'acct_num' => '2', 'value' => 32], 
    ['user' => 'user1', 'acct_num' => '2', 'value' => 32], 
    ['user' => 'user2', 'acct_num' => '1', 'value' => 312], 
    ['user' => 'user2', 'acct_num' => '1', 'value' => 320], 
]; 

$subtotals = []; // totals per account 
$totals = []; // totals per user 
$results = []; 

foreach($csv as $row) { 
    list($user, $acct_num, $value) = array_values($row); 

    $subtotal = isset($subtotals[$user][$acct_num]) ? $subtotals[$user][$acct_num] : 0; 
    $subtotals[$user][$acct_num] = $subtotal + $value; 

    $total = isset($totals[$user]) ? $totals[$user] : 0; 
    $totals[$user] = $total + $value; 
} 

foreach ($subtotals as $user => $acct_nums) { 
    foreach ($acct_nums as $acct_num => $value) { 
     $total = $totals[$user]; 
     $avg = $value/$total; 

     $results[] = compact('user', 'acct_num', 'value', 'total', 'avg'); 
    } 
} 

print_r($results); 

這裏是一個demo

輸出:

 
Array 
(
    [0] => Array 
     (
      [user] => user1 
      [acct_num] => 1 
      [value] => 34 
      [total] => 98 
      [avg] => 0.3469387755102 
     ) 

    [1] => Array 
     (
      [user] => user1 
      [acct_num] => 2 
      [value] => 64 
      [total] => 98 
      [avg] => 0.6530612244898 
     ) 

    [2] => Array 
     (
      [user] => user2 
      [acct_num] => 1 
      [value] => 632 
      [total] => 632 
      [avg] => 1 
     ) 

) 
+0

這太好了!我想知道如何設法知道如何做到這一點。 – dianesis

+0

我認爲這裏有一個無意的錯誤。總數對於數組中的每個項目重複兩次。 – dianesis

相關問題