如何在PHP中跳过第一行CSV

时间:2013-04-24 20:39:26

标签: php csv

我有一个CSV上传,我很难跳过CSV文档的第一行。我正在上传单个CSV文档,第一行包含一个包含一位文本的单元格,该文本将丢弃该数组。我不确定要编辑哪个计数?

$fields_firstrow = true;
$i = 0; 
$a = 0;
$fields = array();
$content = array(); 

$allowedExts = array("csv");
$extension = end(explode(".", $_FILES["file"]["name"]));
if (($_FILES["file"]["size"] < 2000000)&& in_array($extension, $allowedExts))
  {
  if ($_FILES["file"]["error"] > 0)
    {
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
    }
  else
    {

    if (file_exists($_FILES["file"]["name"]))
      {
      echo $_FILES["file"]["name"] . " already exists. ";
      }
    else
      {
      move_uploaded_file($_FILES["file"]["tmp_name"],$_FILES["file"]["name"]);
      }
    }
  }
else
  {
  echo "Invalid file";
  }
$file = $_FILES["file"]["name"];

if (($handle = fopen($file, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
        if($fields_firstrow == true && $i<1) {
            foreach($data as $d) {
                $fields[] = strtolower(str_replace(" ", "_", $d));
            }
            $i++; 
            continue;
        }
        $c = 0;
        foreach($data as $d) {
            if($fields_firstrow == true) {
                $content[$a][$fields[$c]] = $d;
            } else {
                $content[$a][$c] = $d;
            }
            $c++;
        }
        $a++;
    }
} else { 
    echo "Could not open file"; 
    die();
}

非常感谢任何帮助。

4 个答案:

答案 0 :(得分:0)

    $i=0;
    if($fields_firstrow == true) {
        foreach($data as $d) {
            if ($i == 0){continue;}
            $i++;
            $fields[] = strtolower(str_replace(" ", "_", $d));
        }
    }

答案 1 :(得分:0)

以下是http://php.net/fgets修改过的示例:

<?php
$handle = @fopen("/tmp/inputfile.txt", "r");
$firstLine = true;
if ($handle) {
while (($buffer = fgets($handle, 4096)) !== false) {
    if(firstLine) {
        $firstLine = false;
        continue;
    }
    echo $buffer;
}
if (!feof($handle)) {
    echo "Error: unexpected fgets() fail\n";
}
fclose($handle);
}
?>

我假设您看到了这一点,并可以相应地修改您的脚本。

答案 2 :(得分:0)

您没有更改变量$ fields_firstrow的值。对于所有循环迭代,它仍然是真的。

在我看来,根据我对您的代码的理解,您应该在第一次继续之前将其更改为false。

...
if (($handle = fopen($file, "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 0, ",")) !== FALSE) { 
        if($fields_firstrow == true && $i<1) {
            foreach($data as $d) {
                $fields[] = strtolower(str_replace(" ", "_", $d));
            }
            $i++; 
            $fields_firstrow = false;
            continue;
        }
        $c = 0;
        foreach($data as $d) {
            if($fields_firstrow == true) {
                $content[$a][$fields[$c]] = $d;
            } else {
...

也许你之后不需要$ i变量。

答案 3 :(得分:0)

只需在 while循环开始的行之前添加一行额外代码,如下所示:

....
.....
fgetcsv($handle);//Adding this line will skip the reading of th first line from the csv file and the reading process will begin from the second line onwards
while (($data = fgetcsv($handle, 0, ",")) !== FALSE) {
.......
.......

就这么简单........ !!!