使用PHP操作CSV数据

时间:2013-04-15 19:23:50

标签: php arrays csv

我遇到了PHP问题 - 我有一个看起来像这样的CSV文件:

客人姓名,类别,抵达,离境,房价

约翰史密斯,休闲,01-04-10,02-04-10,150

Ann Watson,Private,01-04-11,02-04-11,120

现在 - 有数千行。我需要按类别对它们进行分组,然后为所有休闲添加费率,然后添加所有私人等等。所以我可以得到每个类别的总数。

我设法使用以下代码导入CSV文件:

<?php
$fp = fopen('bookings.csv','r') or die("can't open file");
print "<table>\n";

while($csv_line = fgetcsv($fp,1024)) {
    print '<tr>';
    for ($i = 0, $j = count($csv_line); $i < $j; $i++) 
    {
        print '<td>'.$csv_line[$i].'</td>';
    }
    print "</tr>\n";
}

print '</table>';
fclose($fp) or die("can't close file");
?>

但是我很难将它们分组并将值变为变量(来自相关单元格的特定值)

有人可以协助吗?

感谢

2 个答案:

答案 0 :(得分:0)

这是基于fgetcsv的official PHP Doc

$ratings = array()

if (($handle = fopen("bookings.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if(!isset($ratings[$data[1]]))
            $ratings[$data[1]] = $data[4];
        $ratings[$data[1]] += $data[4];
    }
    fclose($handle);

var_dump($ratings);

答案 1 :(得分:0)

您的csv文件应遵循数据库的模式。如果您的csv文件列是此访客姓名,类别,到达,离开,费率,这也应该是您的数据库的格式。我建议在显示之前将数据存储在数据库中。试试这段代码

if (isset($_FILES['file'])) 
    {
        //Import uploaded file to Database
        $handle = fopen($_FILES['file']['tmp_name'], "r");

        while (($data = fgetcsv($handle, 5000, ",")) !== FALSE) 
        {
            $import= mysqli_query ($connect,"INSERT into table(Column_1,Column_2,Column_3,Column_4) 
            values('$data[0]','$data[1]','$data[2]','$data[3]')");

        }
           //fclose($handle);

    }
    else
    {
        echo "<script>alert('No File Selected')
</script>";
    }