[英]Calculating the average increase from array values in PHP
我需要計算數組值的平均增加量,並且制作了一個可以運行的小腳本,但是我想知道是否:
可以說我有一個像這樣的數組:
$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.