Calculating the average increase from array values in PHP

放肆的年华 提交于 2019-12-24 12:00:40

问题


I need to calculate the average increase of array values, and I've made a little script which works, but I'd like to know if:

  1. There is a better, more efficient way of doing this
  2. My logic is correct here in calculating the average increase

Lets say I have an array like so:

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

Lets also imagine that each array item is 1 day, and the value is some counter for that day. I would like to calculate the average increase/decrease in the counter.

What I've done, is looped through the array, and altered the values so that the current item = current item - previous item, what way I'm left with an array which would look like so:

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

Then I calculate the average as per normal, which in this example would give me a 2 average increase on a daily basis.

Code here:

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

Is the logic correct here, and is there a more efficient way of doing this, maybe without the loop?

Thanks in advance :)

EDIT: Updated code to account for excluding first value


回答1:


How about this:

function moving_average($array) {

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

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



回答2:


Try this :

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



回答3:


Here's a snazzy one-liner for you:

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



回答4:


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

Outputs 1.6666666666667 in float(3.0994415283203E-5)



来源:https://stackoverflow.com/questions/15272851/calculating-the-average-increase-from-array-values-in-php

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!