如何在PHP中导入CSV文件?

39

我对Web开发非常新手,事实上,我刚开始学习。

请问有人能给出一个完整但极其简单的示例,说明如何在PHP中导入CSV文件吗?我尝试使用从互联网上获得的代码,但我感到非常困惑,因为对我来说它很复杂。我正在使用带有PHP 5.3.5、Apache 2.2.17和MySQL 5.5.8的WAMP服务器,请帮忙。

我尝试粘贴代码,但它太混乱了。老实说,我也是StackOverflow的新手。


你能否修改你的问题,包括你愿意透露的尽可能多的错误信息吗?这样更容易进行故障排除。 - Tieson T.
请发布您遇到的错误和您正在使用的代码。 - esqew
好的,我会重新措辞并包含代码。 - Newbie Coder
请参考fgetcsv()文档页面上的示例。希望能对您有所帮助。 - Wiseguy
8个回答

73
从PHP manual中:

<?php
$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        $num = count($data);
        echo "<p> $num fields in line $row: <br /></p>\n";
        $row++;
        for ($c=0; $c < $num; $c++) {
            echo $data[$c] . "<br />\n";
        }
    }
    fclose($handle);
}
?>

1
简单明了。谢谢。 - test
谢谢!非常容易使用!我该如何修改代码以将CSV文件中的项目保存到数组中? - heinkasner

18

我知道这个问题提出已经超过三年了。但是被接受的答案并不是非常有用。

以下代码更为实用。

<?php
$File = 'loginevents.csv';

$arrResult  = array();
$handle     = fopen($File, "r");
if(empty($handle) === false) {
    while(($data = fgetcsv($handle, 1000, ",")) !== FALSE){
        $arrResult[] = $data;
    }
    fclose($handle);
}
print_r($arrResult);
?>

1
它有什么不好的地方吗?在我看来,它似乎是有效的。 - greggles
1
我的意思是,提供一个可工作的示例总比仅仅指出方向更有用。当然,如果有并且正确编写的话。 - Alex

15

我知道的最简单的方法 (str_getcsv),它可以将CSV文件导入数组。

$csv = array_map('str_getcsv', file('data.csv'));

正如链接评论中所指出的,“如果字段包含换行符,则无法产生期望的结果。” - Chandler Swift

6

如果您使用的是高于5.3版本的PHP,可以使用 fgetcsv() 或者 str_getcsv() 函数来处理CSV文件。这些函数非常简单易用。


7
可以更加简单易懂。为什么不能有一个函数,输入CSV字符串/文件名后返回一个数组或异常?天哪,我为什么要循环解析。这是什么,90年代吗? - Jonathan
1
@Jonathan 流式处理比在操作之前将整个40GB CSV文件加载到内存中要高效得多。 - coreyward

2
这里是提取指定列名的版本(改编自@coreyward):
$row = 0;
$headers = [];
$filepath = "input.csv";
if (($handle = fopen($filepath, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
        if (++$row == 1) {
          $headers = array_flip($data); // Get the column names from the header.
          continue;
        } else {
          $col1 = $data[$headers['Col1Name']]; // Read row by the column name.
          $col2 = $data[$headers['Col2Name']];
          print "Row $row: $col1, $col2\n";
        }
    }
    fclose($handle);
}

1
$row = 1;
    $arrResult  = array();
    if (($handle = fopen("ifsc_code.csv", "r")) !== FALSE) {
        while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
            $num = count($data);
            DB::table('banks')->insert(
                array('bank_name' => $data[1], 'ifsc' => $data[2], 'micr' => $data[3], 'branch_name' => $data[4],'address' => $data[5], 'contact' => $data[6], 'city' => $data[7],'district' => $data[8],'state' => $data[9])
            );
        }
        fclose($handle);
    }

1

0
   $filename=mktime().'_'.$_FILES['import']['name'];

      $path='common/csv/'.$filename;

    if(move_uploaded_file($_FILES['import']['tmp_name'],$path))
{

if(mysql_query("load data local infile '".$path."' INTO TABLE tbl_customer FIELDS TERMINATED BY ',' enclosed by '\"' LINES TERMINATED BY '\n' IGNORE 1 LINES (`location`, `maildropdate`,`contact_number`,`first_name`,`mname`,`lastname`,`suffix`,`address`,`city`,`state`,`zip`)"))

    {
      echo "imported successfully";

}

echo "<br>"."Uploaded Successfully".$path;

}

请查看 此处 以获取更多信息。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接