我遇到脚本问题,脚本读取文件(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
答案 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();
一次,如果条件变为真,则输入值。