我有一个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++;
}
答案 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 />';
}
}