值函数不正确

时间:2014-03-10 11:49:39

标签: php arrays max min

我遇到脚本问题,脚本读取文件(CSV)并将每行的最后一个值存储在数组中,然后我计算数组中值的最大值,最小值和平均值,但是大文件脚本给我一个不正确的值为maximun和minimun,在这里你可以下载脚本和两个文件,与文件8.csv计算是正确的但文件1.csv的值是错误的,唯一的区别我看,文件1.csv比另一个大得多。

这是代码:

<?php
$variable2=file("1.csv");
$i=0;
foreach($variable2 as $var){
    if($i==0){
        $i++;
    }else{
        $datos=explode(",",$var);
        $valor=$datos[count($datos)-1];
        if($valor!= -3000){
            $todos[$i-1]=$valor;
            $i++;
        }
    }
}

$promedio=array_sum($todos) / count($todos);
$maximo=max($todos);
$minimo=min($todos);
echo "MAXIMO = ".$maximo." MINIMO = ".$minimo." PROMEDIO = ".$promedio;

?>

这是脚本读取的文件的一部分:

OBJECTID,pointid,grid_code,potrero_ID,MOD13Q1.A2
7300.0,7300.0,1.0,1,6431
7498.0,7498.0,1.0,1,6684
7499.0,7499.0,1.0,1,6431
7500.0,7500.0,1.0,1,6431
7501.0,7501.0,1.0,1,6431
7502.0,7502.0,1.0,1,6431
7503.0,7503.0,1.0,1,6431
7504.0,7504.0,1.0,1,6304
7697.0,7697.0,1.0,1,6734
7698.0,7698.0,1.0,1,6734
7699.0,7699.0,1.0,1,6127
7700.0,7700.0,1.0,1,6127

Expected values:

Maximun: 9307
Minimun: -650
Average: 6555,211347

Output values:

Maximun: 999
Minimun: -104
Average: 6555,3296310272

1 个答案:

答案 0 :(得分:0)

您可以尝试使用此代码

<?php
if (($handle = fopen("1.csv", "r")) !== FALSE) {
    $todos = array();
    $datos = fgetcsv($handle, 1000, ",");
    while (($datos = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $valor=$datos[count($datos)-1];
        if($valor != -3000){
            $todos[]=$valor;
        }
    }
    $promedio=array_sum($todos) / count($todos);
    $maximo=max($todos);
    $minimo=min($todos);
    echo "MAXIMO = ".$maximo." MINIMO = ".$minimo." PROMEDIO = ".$promedio;
    fclose($handle);
}
?>

这里我使用了fgetcsv();读取文件句柄并返回我们可以迭代的整行CSV的数组,然后我初始化$dotos = array();一次,如果条件变为真,则输入值。