计算PHP中数组值的平均增量

时间:2013-03-07 13:47:21

标签: php arrays average

我需要计算数组值的平均增长量,并且我制作了一个可行的小脚本,但我想知道是否:

  1. 有一种更好,更有效的方法
  2. 我的逻辑在计算平均增长时是正确的
  3. 假设我有一个像这样的数组:

    $array = array(5,10,15,10,0,15);
    

    让我们假设每个数组项都是1天,并且该值是当天的某个计数器。我想计算一下柜台的平均增加/减少。

    我做了什么,循环遍历数组,并更改了值,以便当前项目=当前项目 - 上一项,我留下了一个数组看起来像这样的方式:

    $array = array(5,5,-5,-10,15);
    

    然后我按照正常情况计算平均值,在这个例子中,每天平均增加2次。

    代码在这里:

    $array = array(5,10,15,10,0,15);
    $count = count($array);
    
    for($i=0;$i<$count;$i++) {
        if($i==0) {
            $value = $array[$i];
            unset($array[$i]);
        }
        else {
            $tmp = $array[$i];
            $array[$i] -= $value;
            $value = $tmp;
        }
    }
    
    echo array_sum($array) / count($array);
    

    这里的逻辑是否正确,是否有一种更有效的方法,可能没有循环?

    提前致谢:)

    编辑:更新了代码以排除第一个值

4 个答案:

答案 0 :(得分:3)

这个怎么样:

function moving_average($array) {

for ($i = 1; $i < sizeof($array); $i++) {
    $result[] = $array[$i] - $array[$i-1];
}

return array_sum($result)/count($result);
}

答案 1 :(得分:1)

试试这个:

$array       = array(5,10,15,10,0,15);
$array2      = $array;

array_pop($array2);
array_unshift($array2, $array[0]);
$subtracted  = array_map(function ($x, $y) { return $y-$x; } , $array2, $array);
array_shift($subtracted); /// Comment this if you want six values with 0 as first value

echo array_sum($subtracted) / count($subtracted);

答案 2 :(得分:1)

这是一个时髦的单行代表:

$days = array(5, 10, 15, 10, 0, 15);

$deltas = array_slice(array_map(function($day1, $day2) {
    return $day2 - $day1;
}, $days, array_slice($days, 1)), 0, -1);

var_dump(array_sum($deltas) / count($deltas));

答案 3 :(得分:0)

$array = array(5,10,15,10,0,15);
list($prevVal) = array_slice($array, 1);

array_walk($array, function($value, $key, &$prevVal)  use(&$array){
    if ($key==0) { return; }
    $array[$key] = ($value - $prevVal);
    $prevVal = $value;
}, $prevVal);

echo array_sum($array) / count($array);

浮动输出1.6666666666667(3.0994415283203E-5)