0

CSV ドキュメントの最初の行をスキップするのに苦労している CSV アップロードがあります。単一の CSV ドキュメントをアップロードしています。最初の行には、配列をスローする 1 ビットのテキストを含むセルが含まれています。どのカウントを編集すればよいかわかりません。

$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

これは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

変数 $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
    $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 に答える