2

当我的客户将他们的输入输入 Excel 文件时,他们需要列标题。但是当他们将文件导出为 CSV (.csv) 时,它会将列标题包含在其中。那是问题。

+---------+--------+-------------+
| 帖子编号 | 姓名 | 名称 |
+---------+--------+-------------+
    101 noYon设计师
    102 纳基布会计师
    103西开发商
+---------+--------+-------------+

在我的 CSV(逗号分隔)中,我得到:

职位编号、姓名、职务
101,noYon,设计师
102,纳基布,会计师
103,西,开发商

使用 PHP 将 CSV 上传到 MySQL 时,我需要从 CSV 中排除列标题(第一行)。

有什么办法吗?

4

3 回答 3

1

这篇文章这个论坛主题的帮助下,我在同事 Tahmina Aktar Nishi 女士的个人帮助下为我想出了一个可行的解决方案。希望它会帮助任何尝试这样的事情的人:

        //get the csv file
        $file = $_FILES[csv][tmp_name];
        $handle = fopen($file,"r"); // read the file
        ?>

        <?php
        // make the loop and do upload

        $find_header = 0; // a simple counter

        while( $data = fgetcsv( $handle,6000,",","'") ) {
            $find_header++; //update counter

            if( $find_header > 1 ) {
                $sql = mysql_query( "INSERT INTO table_name (
                        post_id,
                        name,
                        designation
                    )
                    VALUES
                    (
                        '".$data[0] ."',
                        '".$data[1] ."'
                        '".$data[2]."'
                    )
                ");
            }
        } // endwhile

逻辑很简单,有点幼稚。如果我们知道如何fgetcsv()工作。fgetcsv()是:

fgetcsv()函数从打开的文件中解析一行,检查 CSV 字段。

fgetcsv()函数在指定长度或 EOF 处停止返回新行,以先到者为准。

这意味着每次循环循环时它都会获取 CSV 的每一行。因此,如果我们传递一个简单的 PHP 计数器并排除第一行,那么就这么简单。

当然,不要忘记使用 PHP 清理函数等清理数据trim()addslashes():)

你可以在这里得到我的一大堆代码。

于 2013-07-15T09:28:48.783 回答
1

一个简单的解决方案:读取第一行并将其丢弃,然后在循环中逐行读取文件的其余部分:

//get the csv file
$file = $_FILES[csv][tmp_name];
$handle = fopen($file,"r");
fgetcsv($handle);  // Discard first line. If we know the maximum line length
                   // add it as second argument: it's slightly faster 

while( $data = fgetcsv( $handle) ) {
   $query = mysqli->query( "INSERT INTO table (post_id,name,designation) VALUES ('". 
                implode($data,"','")."'"; 
} 

我没有在这里编码的更快的解决方案:将多组值附加到INSERT这样的:

INSERT INTO tbl_name (a,b,c) VALUES(1,2,3),(4,5,6),(7,8,9);
于 2013-07-15T09:45:32.147 回答
0
$filename = $_FILES["file"]["tmp_name"];
if ($_FILES["file"]["size"] > 0){
    $file = fopen($filename, "r");
    fgetcsv($file);
    while (($getData = fgetcsv($file, 10000, ",")) !== false){
        echo "<pre>";
        print_r($getData);
        echo "</pre>";
    }

    fclose($file);
}
于 2020-05-20T08:31:17.057 回答