用PHP计算数组值的平均增量
我需要计算数组值的平均增加量,我制作了一个小脚本,它可以工作,但我想知道:用PHP计算数组值的平均增量,php,arrays,average,Php,Arrays,Average,我需要计算数组值的平均增加量,我制作了一个小脚本,它可以工作,但我想知道: 有一种更好、更有效的方法可以做到这一点 在计算平均增长时,我的逻辑是正确的 假设我有这样一个数组: $array = array(5,10,15,10,0,15); 我们还假设每个数组项为1天,该值是该天的某个计数器。我想计算一下柜台的平均增减量 我所做的是在数组中循环,并修改值,使当前项=当前项-上一项,我剩下的数组是这样的: $array = array(5,5,-5,-10,15); 然后,我按照正常值计算平均
$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);
$array=array(5,10,15,10,0,15);
$count=计数($array);
对于($i=0;$i请尝试以下方法:
$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);
试试这个:
$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));
这是给你的时髦单品:
$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));
这个怎么样:
function moving_average($array) {
for ($i = 1; $i < sizeof($array); $i++) {
$result[] = $array[$i] - $array[$i-1];
}
return array_sum($result)/count($result);
}
函数移动平均($array){
对于($i=1;$i
这个怎么样:
function moving_average($array) {
for ($i = 1; $i < sizeof($array); $i++) {
$result[] = $array[$i] - $array[$i-1];
}
return array_sum($result)/count($result);
}
函数移动平均($array){
对于($i=1;$i
浮点输出1.667(3.0994415283203E-5)
浮点输出1.667(3.0994415283203E-5)效果很好,将以@silkfire-answer为基准,看看哪一个更有效。谢谢!效果很好,将以@silkfire-answer为基准,看看哪一个更有效。谢谢!这也很好,是我原来循环的一个更整洁的版本,谢谢!一些测试表明这是最快的方法,s哦,谢谢。如果我能把你的答案标记为我会的答案,但我真的很喜欢@silkfire的回答的时髦。所以,你愿意放弃速度而选择一行吗?;-)你让我感觉很糟糕。我总是追求速度,并且会使用您的代码,所以我想答案应该由您决定?谢谢,我很感激;-)这也很好,一个更整洁的版本,我原来的循环,谢谢!一些测试表明,这是最快的方法,所以谢谢。如果我能把你的答案标记为我会的答案,但我真的很喜欢@silkfire的回答的时髦。所以,你愿意放弃速度而选择一行吗?;-)你让我感觉很糟糕。我总是追求速度,并且会使用您的代码,所以我想答案应该由您决定?谢谢,我很感激;-)