根据导入的CSV文件中的列将行分组在一起



我有一个CSV文件,里面有很多行,如下所示:

客户产品数量单位金额合计1产品1 10 10 101产品2 15 302产品1 2 12 242产品2 1 5 5

等等。。。

我希望能够使用PHP导入CSV文件,并将每个客户端分组在一起,显示每个客户端的总成本。

我有我的导入功能等…

if(is_uploaded_file($_FILES['file']['tmp_name'])) {
    echo "<h3>" . "File ". $_FILES['file']['name'] ." uploaded successfully." . "</h3><br><br>";
}
$handle = fopen($_FILES['file']['tmp_name'], "r");
fgetcsv($handle);
//then loop through each row
while(($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
}

但我不确定在while循环内该怎么办

如果可能的话,我想在不使用数据库的情况下完成这项工作

$clients = array();
while(($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
     if(!array_key_exists($data[0],$clients))
         $clients[$data[0]] = array();
      array_push($clients[$data[0]],$data);
}

//then loop over each client in your array
foreach($clients as $clientId => $clientEntries)
{
// combine or print records...
}

因此,循环中的任务是获取$data提供的数组,并将其转换为一个可用的数组,该数组使用客户端id作为键,总成本作为值。我的实现方式如下:

$customerTotals = array();
while ($data = fgetcsv($handle, 1000, ',')) {
  $currentTotal = isset($customerTotals[$data[0]]) ? intval($customerTotals[$data[0]]) : 0;
  $addedTotal = intval($data[2]) * intval($data[4]);
  $customerTotals[$data[0]] = $currentTotal + $addedTotal;
}

请注意,上面的代码没有进行任何健全性检查。空行或缺少列将导致意外错误。它将第一列客户id作为数组键,并将第三列和第五列分别作为数量和价格相乘。

您现在可以这样迭代这个数组:

foreach ($customerTotals as $customerId => $total) {}

最新更新