2013-03-19 77 views
0

我想知道如何從這個數組中的某些鍵(通話,聯繫人和音調)中獲取平均值。我希望結果是隻有三個鍵的數組,其中包含三個鍵的平均值。所以它應該是[calls] => 27 [contacts] => 13等。在此先感謝。按鍵排列的PHP平均數

Array ( 
    [0] => Array ( 
       [index] => 78 
       [name] => RepOne 
       [repnumber] => 0001 
       [date] => 2013-03-16 07:17:14 
       [calls] => 36 
       [contacts] => 21 
       [pitches] => 10 
    ) 

    [1] => Array ( 
       [index] => 75 
       [name] => RepOne 
       [repnumber] => 0001 
       [date] => 2013-03-13 10:03:06 
       [calls] => 18 
       [contacts] => 12 
       [pitches] => 8 
    ) 

    [2] => Array ( 
       [index] => 74 
       [name] => RepOne 
       [repnumber] => 0001 
       [date] => 2013-03-12 03:03:06 
       [calls] => 20 
       [contacts] => 6 
       [pitches] => 3 
    ) 
) 

回答

1
$avrage = array('calls' => 0,'contacts' => 0,'pitches' => 0); #prevent notice 
$i = count($yourArray); #UPDATE 
foreach($yourArray as $value) 
{ 
    $avrage['calls'] += $value['calls']; 
    $avrage['contacts'] += $value['contacts']; 
    $avrage['pitches'] += $value['pitches']; 
} 
# UPDATE : check zero value before using division . 
$avrage['calls'] = ($avrage['calls']?floor($avrage['calls']/$i):0); #round value 
$avrage['contacts'] = ($avrage['contacts']?floor($avrage['calls']/$i):0); 
$avrage['pitches'] = ($avrage['pitches']?floor($avrage['calls']/$i):0); 
+0

謝謝!很棒。 – Djacksway 2013-03-19 17:19:56

+0

歡迎你,我補充一些問題。 – 2013-03-19 17:33:28

2

下面的代碼假定您的數據的結構像這樣JSON:

[ 
    { 'call': 5, 'contacts': 2, 'pitches': 3 }, 
    { 'call': 22, 'contacts': 17, 'pitches': 1 } 
] 

或者這樣JSON:

{ 
    'rep1_id': { 'call': 5, 'contacts': 2, 'pitches': 3 }, 
    'rep2_id': { 'call': 22, 'contacts': 17, 'pitches': 1 } 
} 

試試這個:

function array_average_by_key($arr) 
{ 
    $sums = array(); 
    $counts = array(); 
    foreach($arr as $k => &$v) 
    { 
     foreach($v as $sub_k => $sub_v) 
     { 
      if(!array_key_exists($sub_k, $counts)) 
      { 
       $counts[$sub_k] = 0; 
       $sums[$sub_k] = 0; 
      } 
      $counts[$sub_k]++; 
      $sums[$sub_k] += $sub_v; 
     } 
    } 
    $avg = array(); 
    foreach($sums as $k => $v) 
    { 
     $avg[$k] = $v/$counts[$k]; 
    } 
    return $avg; 
} 
0
<?php 

$dataRows = ...your array...; 

$averages = array('calls' => 0, 'pitches' => 0, 'contacts' => 0) 

//sum average for each row 
foreach($dataRows as $row) { 
    foreach($row as $key => $value) { 
     $add = false; 

     //only add for specific values 
     switch($key) { 
      case 'calls': 
      case 'pitches': 
      case 'contacts': 
       $add = true; 
     } 

     if($add) { 
      $averages[$key] += $value; 
     } 

    } 
} 

//divide by number of rows for average 
//the &$value is important as it is the refernce to the value 
//so it will set the value in the array 
foreach($average as &$value) { 
    $value /= count($dataRows); 
} 
0

我猜你的意思是這樣的。我爲「平均值」拉動了的平均值

<?php 
$newAverages = array(); 

$contacts = ''; 
$pitches = ''; 
$calls = ''; 

//Simply add them all together 
foreach ($original_array as $key=>$throwaway){ 
$contacts = $contacts + $original_array[$key]['contacts']; 
$pitches = $pitches + $original_array[$key]['pitches']; 
$calls = $calls + $original_array[$key]['calls']; 
} 

$totalReps = count($original_array); 

//Then divide by the total 
$newAverages['contacts'] = $contacts/$totalReps; 
$newAverages['pitches'] = $pitches/$totalReps; 
$newAverages['calls'] = $calls/$totalReps; 

print_r($newAverages); 
?> 
0

即使像array_sum()的一些快捷功能在PHP中存在,這種二維結構的直接一步一步的解決辦法是可能是最好的:

$input_array = ... 
$wanted_columns = array ("call", "contacts", "pitches"); 
$result = array_fill_keys ($wanted_columns, 0); 

foreach ($input_array as $row) 
    foreach ($wanted_columns as $column_name) 
     $result[$column_name] += $row[$column_name]; 

$array_size = count ($input_array); 
foreach ($result as &$value) 
    $value /= $array_size; 

* *以上代碼適用於任何需要的列,您只需設置$ wanted_columns

0

這是另一個更詳細的方法:

// a function to extract values by particular column names 
function array_columns(array $array, array $columns) 
{ 
    $result = array_fill_keys($columns, array()); 
    foreach($array as $value) 
    { 
     foreach($columns as $column) 
     { 
      $result[ $column ][] = is_array($value) && array_key_exists($column, $value) 
            ? $value[ $column ] 
            : null; 
     } 
    } 

    return $result; 
} 

// a function to calculate the average value of array elements 
function array_average(array $array) 
{ 
    $count = count($array); 
    return $count > 0 ? array_sum($array)/$count : 0; 
} 

用法:

$averages = array_map('array_average', array_columns($yourArray, array('calls', 'contacts', 'pitches'))); 

var_dump($averages); 

產地:

array(3) { 
    ["calls"]=> 
    float(24.666666666667) 
    ["contacts"]=> 
    int(13) 
    ["pitches"]=> 
    int(7) 
} 
0

如果你正在使用PHP 5 +,你可以使用以下命令:

function calculateAverage($array){ 
    $sum = array_sum($array); 
    $average = $sum/count($array); 

    return $average; 
} 

// Assuming the original array above is used 
$contactsAverage = calculateAverage(array_column($associativeArrayAbove, "contacts")); 
echo $contactsAverage;