需要php循环逻辑的帮助吗
除了不打印我的csv文件的最后两行之外,此代码工作正常: 这是文件: 603629,0,ATLV0008,"Vendor1",1942.60,11/04/2010,1942.60,9/1-9/30/10,EFT-JP 603627,2,ATLV0008,"Vendor1",1242.40,11/04/2010,1242.40,7/1-7/31/10,EFT-JP 600023,0,FLD4V0003,"Vendor2",1950.00,06/15/2010,1950.00,6/14/10 Request,EFT-JP 600024,0,FLD4V0003,"Vendor2",1800.00,06/15/2010,1800.00,6/14/10 Request,EFT-JP 603631,0,ATLV5066,"Vendor2",1000.00,11/09/2010,1000.00,11/4/10 Check Request,PM2 603647,0,ATLV5027,"DVendor3",2799.80,11/15/2010,2799.80,10/1-10/31/10 Bishop,PM2 603642,5,ATLV5027,"Vendor3",482.40,11/15/2010,482.40,10/1-10/18/10 Allen,PM2 603653,0,ATLV0403,"Vendor4",931.21,11/17/2010,931.21,9/1-9/30/10,EFT-JP 603661,0,ATLV0105,"Vendor5",26.75,11/19/2010,26.75,093139,PM2 603660,1,ATLV0105,"Vendor5",5.35,11/19/2010,5.35,093472,PM2 603629,0,ATLV008,“供应商1”,1942.60,11/04/20101942.60,9/1-9/30/10,EFT-JP 603627,2,ATLV008,“卖方1”,1242.40,11/04/20101242.40,7/1-7/31/10,EFT-JP 600023,0,FLD4V003,“供应商2”,1950.00,06/15/20101950.00,6/14/10请求,EFT-JP 600024,0,FLD4V003,“供应商2”,1800.00,06/15/20101800.00,6/14/10请求,EFT-JP 603631,0,ATLV5066,“供应商2”,1000.00,11/09/20101000.00,11/4/10检查请求,PM2 603647,0,ATLV5027,“DVendor3”,2799.80,11/15/20102799.80,10/1-10/31/10,PM2主教 603642,5,ATLV5027,“供应商3”,482.40,11/15/2010482.40,10/1-10/18/10艾伦,PM2 603653,0,ATLV0403,“供应商4”,931.21,11/17/2010931.21,9/1-9/30/10,EFT-JP 603661,0,ATLV0105,“供应商5”,26.75,11/19/2010,26.75093139,PM2 603660,1,ATLV0105,“供应商5”,5.35,11/19/2010,5.35093472,PM2 代码如下:(需要在实际行之前显示同一供应商的两行之和)需要php循环逻辑的帮助吗,php,loops,Php,Loops,除了不打印我的csv文件的最后两行之外,此代码工作正常: 这是文件: 603629,0,ATLV0008,"Vendor1",1942.60,11/04/2010,1942.60,9/1-9/30/10,EFT-JP 603627,2,ATLV0008,"Vendor1",1242.40,11/04/2010,1242.40,7/1-7/31/10,EFT-JP 600023,0,FLD4V0003,"Vendor2",1950.00,06/15/2010,1950.00,6/14/10 Req
if($handle=fopen($upload/ATLANTA.csv',“r”)!==FALSE){
而($row_array=fgetcsv($handle,1000,“,”)){
foreach($key=>$val的行数组){
$row_数组[$key]=trim(str_replace(''',''$val));
ob_flush();
}
$complete[]=$row\u数组;
ob_flush();
}
}
冲洗();
$prevVendor='';
$sum=0;
$venData='';
如果(isset($complete)){
foreach($key=>$val){
$venData.=“
”;
$currVendor=$complete[$key][3];
如果($currVendor!=$prevVendor){
如果($prevVendor!=NULL){
打印“
”;
打印$sum。“
”;
打印$venData;
$sum=0;$venData='';
}
}
foreach($valas$ikey=>$ival){
如果($ikey!=1){
$venData.=$ival'';
$prevVendor=$val[3];
}
}
如果($currVendor==$prevVendor){
$sum+=$complete[$key][6];
}
}
}我不太理解您的问题,但如果您想获得(并将其保存在任何地方)每个供应商的总和,您应该执行以下操作:
$prevVendor = null;
$venData = '';
$sums = array();
if (isset($complete) && is_array($complete)) {
$lim = count($complete);
for ($key=0;$key<$lim;++$key) { // no need foreach for simple array
$venData .= "<br/>";
$currVendor = $complete[$key][3];
if ($currVendor != $prevVendor){
if ($prevVendor != null){
print "<br/>";
print $venData;
}
$venData = '';
$prevVendor = $currVendor;
$sums[$currVendor] = 0; // set the counter to 0
}
foreach ($complete[$key] as $ikey => $ival){
if ($ikey != 1){
$venData .= $ival . ' '; // is useful for you I guess
}
}
$sums[$currVendor] += $complete[$key][6]; // add amounts
}
}
if ($prevVendor != null){ // you need to do this to display the last record
print "<br/>";
print $venData;
}
var_export($sums); // check results
$prevVendor=null;
$venData='';
$sums=array();
if(isset($complete)和is_数组($complete)){
$lim=计数($complete);
对于($key=0;$key$ival){
如果($ikey!=1){
$venData.=$ival.';//我想这对你很有用
}
}
$sums[$currvindowner]+=$complete[$key][6];//添加金额
}
}
如果($prevVendor!=null){//,则需要执行此操作以显示最后一条记录
打印“
”;
打印$venData;
}
var_export($sums);//检查结果
这可能是一些语法错误…请尝试提高您对其他问题的接受率。如果您提出了一个问题,并且有人正确回答了,请标记该问题(单击前面问题中最有用的帖子旁边的勾号)我建议使用更好的缩进,并尝试构建一个在csv文件数据上迭代一次的Rational循环,有没有更好的方法呢?总和计算工作正常,问题是文件的最后两行没有打印出来,因为打印发生在开始,循环发生在结束必须保持这种方式是因为我需要在打印之前进行求和计算。我仍然不明白…在循环之后添加此项?:if($prevVendor!=NULL){print$sum。“
”;}在循环之后添加此项:if($prevVendor!=NULL){print”
;“print$venData;}
$prevVendor = null;
$venData = '';
$sums = array();
if (isset($complete) && is_array($complete)) {
$lim = count($complete);
for ($key=0;$key<$lim;++$key) { // no need foreach for simple array
$venData .= "<br/>";
$currVendor = $complete[$key][3];
if ($currVendor != $prevVendor){
if ($prevVendor != null){
print "<br/>";
print $venData;
}
$venData = '';
$prevVendor = $currVendor;
$sums[$currVendor] = 0; // set the counter to 0
}
foreach ($complete[$key] as $ikey => $ival){
if ($ikey != 1){
$venData .= $ival . ' '; // is useful for you I guess
}
}
$sums[$currVendor] += $complete[$key][6]; // add amounts
}
}
if ($prevVendor != null){ // you need to do this to display the last record
print "<br/>";
print $venData;
}
var_export($sums); // check results