php PHP动态创建CSV:跳过CSV文件的第一行

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/10901113/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-24 23:18:44  来源:igfitidea点击:

PHP dynamically create CSV: Skip the first line of a CSV file

phphtmlcsvfgetcsv

提问by Nathan Dunn

I am trying to import a CSV file. Due to the program we use, the first row is basically all headers that I would like to skip since I've already put my own headers in via HTML. How can I get the code to skip the first row of the CSV? (the strpos command is to cut off the first field in all the rows.)

我正在尝试导入 CSV 文件。由于我们使用的程序,第一行基本上是我想跳过的所有标题,因为我已经通过 HTML 放置了自己的标题。如何获取跳过 CSV 第一行的代码?(strpos 命令是切断所有行中的第一个字段。)

<?php
$row = 1;
if (($handle = fopen("ptt.csv", "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
    $num = count($data);
           $row++;
    for ($c=0; $c < $num; $c++) {
    if(strpos($data[$c], 'Finished') !== false) {
    $c++;
echo "<TR> <TD nowrap>" . $data[$c] . "</ TD>"; }
    Else{
        echo "<TD nowrap>" .  $data[$c] . "</ TD>";
        }
    }
}
fclose($handle);
}
?>

回答by Rahul Gupta

Rather than using if condition for checking whether it is the first row, a better solution is to just add an extra line of code before the line from where the while loop starts as shown below :

与其使用 if 条件来检查它是否是第一行,更好的解决方案是在 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, 1000, ",")) !== FALSE) {
.......
.......

It is just as simple......

就这么简单......

回答by John Lawrence

As you are keeping track of the row number anyway, you can use continueto skip the rest of the loop for the first row.

无论如何,当您跟踪行号时,您可以使用continue跳过第一行的其余循环。

For example, add this at the start of your while loop (just above $num = count($data)):

例如,在你的 while 循环开始处添加这个(就在 上方$num = count($data)):

if($row == 1){ $row++; continue; }

There are other ways to do this, but just make sure that when you continue, $rowis still being incremented or you'll get an infinite loop!

还有其他方法可以做到这一点,但只要确保当你继续时,$row它仍在递增,否则你会得到一个无限循环!

回答by Crayon Violent

put this inside your while loop:

把它放在你的while循环中:

if ($row == 1) continue;

if ($row == 1) continue;

回答by Amir Md Amiruzzaman

Please use the following lines of code

请使用以下代码行

$flag = true;
while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
if($flag) { $flag = false; continue; }
//your code for insert
}

Having the flag variable as true and setting it to false will skip the first line of the CSV file. This is simple and easy to implement.

将标志变量设置为 true 并将其设置为 false 将跳过 CSV 文件的第一行。这很简单,易于实现。

回答by Nimish

$count = 0;
while (($fields = fgetcsv($handle, 0, ",")) !== FALSE) {
    $count++;
    if ($count == 1) { continue; }

回答by Louis Ferreira

this worked for me:

这对我有用:

$count = 0;

while(! feof($file))

      {

          $entry = fgetcsv($file, 0, ';');

          if ($count > 0) {
          //skip first line, header


          }

      $count++;
}

回答by prehfeldt

Add this in the body of the whileloop above the $row++;:

将此添加到while循环体中$row++;

if ($row == 1) {
    continue;
}

回答by Furqan Aziz

use this code

使用此代码

// mysql hostname
$hostname = 'localhost';
// mysql username
$username = 'root';
// mysql password
$password = '';

if (isset($_FILES['file']))
{   

// get the csv file and open it up
$file = $_FILES['file']['tmp_name'];
//$handle is a valid file pointer to a file successfully opened by fopen(), popen(), or fsockopen(). 
$handle = fopen($file, "r"); 
    try { 
    // Database Connection using PDO
    $dbh = new PDO("mysql:host=$hostname;dbname=clasdb", $username, $password);
    // prepare for insertion
    $STM = $dbh->prepare('INSERT INTO statstrackertemp (ServerName, HiMemUti, AvgMemUti, HiCpuUti, AvgCpuUti, HiIOPerSec, AvgIOPerSec, HiDiskUsage, AvgDsikUsage) VALUES (?, ?, ?, ?, ?,?, ?, ?, ? )');



        if ($handle !== FALSE) 
        {
            // fgets() Gets a line from file pointer and read the first line from $handle and ignore it.   
            fgets($handle);
            // created loop here
            while (($data = fgetcsv($handle, 1000, ',')) !== FALSE)
            {
            $STM->execute($data);
            }       

            fclose($handle);

        }

    } 
    catch(PDOException $e)
    {
    die($e->getMessage());
    }

echo 'Data imported'; 

}
else 
{
echo 'Could not import Data';
}

?>