【问题标题】:Finding average of same key values of an associate array查找关联数组的相同键值的平均值
【发布时间】:2013-03-21 08:44:53
【问题描述】:

我有一个数组,例如

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

但我无法找到每个月的平均值。在我的例子中,December 2012 有 31 个实例,November 2012 有 31 个实例,October 2012 有 25 个实例。因此,我需要掌握这些 313125 值,以便我可以将一个月除以该数字。

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

PS:我无法硬编码月份名称(10 月、11 月、12 月)以进行比较。它们会定期更改。

【问题讨论】:

    标签: php arrays associative-array average


    【解决方案1】:
    $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);
    
    }
    

    【讨论】:

    • 确实有效。 +1 并接受作为答案。将$eachMonth[$month][] = $cent 移到isset 循环之外就可以了。谢谢。
    【解决方案2】:

    试试这个:

    $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);
    

    【讨论】:

    • 是的....虽然我觉得很长,但是逻辑很清楚-> 根据月份对数组进行分组,然后找到每个数组的平均值。让我看看我是否可以减少代码的长度。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-22
    • 1970-01-01
    • 2020-09-06
    • 1970-01-01
    相关资源
    最近更新 更多