0

我有一个 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

4 回答 4

1

只需在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) {
.......
.......

就是这么简单…………!!!

于 2013-10-08T08:05:04.227 回答
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 变量。

于 2013-04-24T21:23:05.293 回答
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);
}
?>

我假设您明白这一点,并且可以相应地修改您的脚本。

于 2013-04-24T21:17:32.733 回答
0
    $i=0;
    if($fields_firstrow == true) {
        foreach($data as $d) {
            if ($i == 0){continue;}
            $i++;
            $fields[] = strtolower(str_replace(" ", "_", $d));
        }
    }
于 2013-04-24T20:45:50.573 回答