查找关联数组的相同键值的平均值


Finding average of same key values of an associate array

我有一个数组,比如

//$ary, $ary contains some 80 entries, I'm showing only the first 10
Array
(
    [0] => Array
        (
            [December 2012] => 58
        )
    [1] => Array
        (
            [November 2012] => 84
        )
    [2] => Array
        (
            [December 2012] => 83
        )
    [3] => Array
        (
            [November 2012] => 72
        )
    [4] => Array
        (
            [November 2012] => 47
        )
    [5] => Array
        (
            [December 2012] => 93
        )
    [6] => Array
        (
            [November 2012] => 79
        )
    [7] => Array
        (
            [October 2012] => 70
        )
    [8] => Array
        (
            [November 2012] => 75
        )
    [9] => Array
        (
            [October 2012] => 59
        )
    [10] => Array
        (
            [December 2012] => 67
        )
)

我可以使用获得每个月的总数

foreach($ary as $array)
{   
    foreach($array as $month=>$cent)
    {
        if(isset($abc[$month])) // prevent index warning
        {           
            $abc[$month] += $cent;
           // tried using $abc[$month] = $abc[$month]/2 but wrong values were returned
        }
        else
        {
            $abc[$month] = $cent;
        }
    }
}

这导致

Array
(
    [December 2012] => 2195
    [November 2012] => 2159
    [October 2012] => 1631
)

但我找不到一种方法来计算每个月的平均值。在我的情况下,有31个December 2012实例、31个November 2012实例和25个October 2012实例。因此,我需要掌握这些313125的值,这样我就可以用这个数字除以一个月。

我认为必须在if(isset($abc[$month]))循环中做一些事情才能捕获,但到目前为止还没有成功。有其他方法可以得到平均值吗?

附言:为了便于比较,我不能硬编码月份的名称(十月、十一月、十二月(。它们定期更换。

$eachMonth = array();
foreach($ary as $array)
{   
   foreach($array as $month=>$cent)
  {
    $eachMonth[$month][] = $cent;
    if(isset($abc[$month])) // prevent index warning
    {           
        $abc[$month] += $cent
    }
    else
    {
        $abc[$month] = $cent;
    }
  }
}

然后每个月你可以计算平均值:

foreach( $eachMonth as $month => $values)
{
   echo $month.' : '.$abc[$month] / count($values);
}

试试这个:

$your_array = array(array("December 2012" => 58),
               array("December 2012" => 58)
              );
$res    = array();            
foreach($your_array as $val){
  $res[key($val)][] = $val[key($val)];
}
foreach($res as $k=>&$v){
   $v    = array_sum($v)/count($v);
}
echo "<pre>";
print_r($res);