前一行的Foreach循环平均值

时间:2014-10-25 09:21:10

标签: php foreach

我有一个foreach循环,它从MySQL数据库中获取一些值。 foreach它非常简单但有大约100行,如:

foreach($values as $value){}

我想要做什么,但我不知道如何在foreach内部制作前5行的平均值。所以从第5行开始做行1-5的平均值然后在行6上做第2-6行的平均值等。


稍后编辑,一个简单的例子 例如:

$values = array(1,2,3,4,5,6,7,8,9,10);
$i = 0;
foreach($values as $value){
if $i > 5{$average = (1+2+3+4+5)/5 }
// and here continue like if $i = 6 {$average = (2+3+4+5+6)/5}
// if $i = 7 {$average = (3+4+5+6+7)/5}
$i++;
}

3 个答案:

答案 0 :(得分:3)

$total = 0;
foreach ($values as $i => $value) {
    $total += $value;
    if ($i >= 5) {
        $total -= $values[$i-5]; // Remove the oldest row
        $count = 5;
    } else {
        $count = $i+1;
    }
    $average = $total/$count;
}

答案 1 :(得分:1)

这里有点晚了(澳大利亚),但我认为有些事情是这样的。

$avg = array();
$averages = array();
$i = 0;
foreach($values as $value){
    $i++;
    echo $value;
    if($i <= 5){
        $avg[] = $value;
    }else{
        $calc = 0;
        foreach($avg as $a){
             $calc = $calc + $a;
        }
        $averages = $calc / 5;
    }
}

print_r($averages);

答案 2 :(得分:1)

您可以使用array_slice()进行切片,array_sum()计算总数,然后计算平均值。这里有一个例子

$values = array(1,2,3,4,5,6,7,8,9,10);
foreach($values as $k=>$v){
    if($k > 4){
       echo $ave = array_sum(array_slice($values, $k - 5, $k)) / 5 . '<br />';
    }
}