用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的回答的时髦。所以,你愿意放弃速度而选择一行吗?;-)你让我感觉很糟糕。我总是追求速度,并且会使用您的代码,所以我想答案应该由您决定?谢谢,我很感激;-)