2010-12-17 224 views
0

此代碼的工作完全不同的是它不打印的最後2行我的csv文件的:需要用PHP循環邏輯幫助

這是文件:

 
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

下面是代碼:(它需要實際的行前顯示2行與同一個供應商的總和)

if (($handle = fopen('upload/ATLANTA.csv', "r")) !== FALSE) { 
    while (($row_array = fgetcsv($handle, 1000, ","))) { 
    foreach ($row_array as $key => $val) { 
     $row_array[$key] = trim(str_replace('"', '', $val)); 
     ob_flush(); 
     } 
    $complete[] = $row_array; 
    ob_flush(); 
    } 
} 
flush(); 

$prevVendor = ''; 
$sum = 0; 
$venData = ''; 

    if (isset($complete)) { 

     foreach ($complete as $key => $val) { 
      $venData .= "<br/>"; 
      $currVendor = $complete[$key][3]; 

      if ($currVendor != $prevVendor){ 

        if ($prevVendor != NULL){ 
         print "<br/>"; 
         print $sum . "<br/>"; 
         print $venData; 
         $sum = 0; $venData = ''; 
        } 
       } 

     foreach ($val as $ikey => $ival){ 
      if ($ikey != 1){ 
       $venData .= $ival . '&nbsp'; 
       $prevVendor = $val[3]; 
       } 
     } 

     if ($currVendor == $prevVendor){ 
       $sum += $complete[$key][6]; 
      }  
    } 

}

+6

請儘量提高你的其他問題,您接受的速度。 – DeaconDesperado 2010-12-17 18:33:01

+0

我該怎麼做? – MG1 2010-12-17 18:39:34

+0

如果您提出問題,並且有人正確回答,請將其標記爲 – 2010-12-17 18:56:34

回答

1

我真的不明白你的問題,但如果你想獲得(和保存它無論你想要的)每個廠商的總和,你應該做這樣的事情:

$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 . '&nbsp;'; // 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 

這可能是一些語法錯誤...

+0

總和計算工作正常,問題是文件的最後兩行沒有打印,因爲打印在開始時發生,循環發生在最後。我必須這樣保持原因是因爲我需要在打印之前進行總和計算。 – MG1 2010-12-17 19:05:57

+0

我還是不明白...在循環之後添加這個? : if($ prevVendor!= NULL){ \t print $ sum。 「
」; } – 2010-12-17 19:24:50

+0

問題是文件的最後2行沒有打印出來... – MG1 2010-12-17 19:29:31