我有一个CSV文件,里面有很多行,如下所示:
客户产品数量单位金额总计 1 Prod1 1 10 10 1 Prod2 2 15 30 2 Prod1 2 12 24 2 Prod2 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循环中做什么
如果可能的话,我想在不使用数据库的情况下这样做
答案 0 :(得分:0)
$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...
}
答案 1 :(得分:0)
因此,循环中的任务是获取$ 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)作为数组键,将第3列和第5列分别放在一起,数量和价格。
您现在可以像这样迭代这个数组:
foreach ($customerTotals as $customerId => $total) {}