【问题标题】:How to import csv file in PHP?如何在 PHP 中导入 csv 文件?
【发布时间】:2011-08-14 08:46:05
【问题描述】:

我对 Web 开发非常陌生。事实上,我才刚刚开始学习。

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

我试图粘贴代码,但它很乱。老实说,我对 StackOverflow 也很陌生。

【问题讨论】:

  • 您能否修改您的问题以包含尽可能多的错误?以这种方式进行故障排除要容易得多。
  • 发布您遇到的错误和您正在使用的代码。
  • 好的,我会改写它并包含代码。
  • 查看fgetcsv() 文档页面上的示例。希望对您有所帮助。

标签: php csv


【解决方案1】:

来自 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);
}
?>

【讨论】:

  • 简单。精确的。谢谢。
  • 谢谢!使用非常简单!如何修改它以将 csv 中的项目保存到数组中?
【解决方案2】:

我知道三年多以前有人问过这个问题。 但是接受的答案并不是非常有用。

下面的代码比较有用。

<?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);
?>

【讨论】:

  • 在什么方面没有用?在我看来它很有效。
  • 我的意思是,提供的工作示例总是比仅仅指向正确方向更有用。如果可以的话当然可以并且写得正确。
【解决方案3】:

我知道的最简单的方法 (str_getcsv),它将一个 CSV 文件导入到一个数组中。

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

【讨论】:

  • 如链接评论中所述,“如果字段包含换行符,则不会产生所需的结果。”
【解决方案4】:

PHP > 5.3 使用fgetcsv()str_getcsv()。再简单不过了。

【讨论】:

  • 可能更容易。为什么不是一个接受 CSV 字符串/文件名并返回数组或异常的函数呢? Jeepers 为什么我必须循环和解析。这是什么,90年代
  • @Jonathan Streaming 比在操作之前将整个 40GB CSV 文件加载到内存中要高效得多。
【解决方案5】:

这里是按名称提取特定列的版本(修改自@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);
}

【讨论】:

    【解决方案6】:

    如果你使用composer,可以试试CsvFileLoader

    【讨论】:

      【解决方案7】:
      $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);
          }
      

      【讨论】:

        【解决方案8】:
           $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;
        
        }
        

        查看here 了解更多信息

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-10
          • 2013-05-01
          • 2012-10-27
          • 2023-04-07
          • 1970-01-01
          • 1970-01-01
          • 2021-12-26
          • 1970-01-01
          相关资源
          最近更新 更多