繁体   English   中英

需要帮助的PHP循环逻辑

[英]need help with php loop logic

这段代码可以正常工作,除了它不会打印我的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

这是代码:(它需要在实际行之前显示同一供应商的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];
            }    
    }

}

我不太了解您的问题,但是如果您想获取(并将其保存在任意位置)每个供应商的总和,则应该执行以下操作:

$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

这可能是一些语法错误...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM