簡體   English   中英

從PHP中的數組值計算平均增長

[英]Calculating the average increase from array values in PHP

我需要計算數組值的平均增加量,並且制作了一個可以運行的小腳本,但是我想知道是否:

  1. 有一種更好,更有效的方法
  2. 我的邏輯在計算平均增長率時是正確的

可以說我有一個像這樣的數組:

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

這里的邏輯是否正確?是否有更有效的方法(也許沒有循環)?

提前致謝 :)

編輯:更新代碼以解決排除第一個值

這個怎么樣:

function moving_average($array) {

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

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

嘗試這個 :

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

這是給您一個時髦的單線:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM