33

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.)

<?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);
}
?>
Rahul Gupta
  • 9,775
  • 7
  • 56
  • 69
Nathan Dunn
  • 333
  • 1
  • 3
  • 5

8 Answers8

72

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 :

....
.....
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......

Rahul Gupta
  • 9,775
  • 7
  • 56
  • 69
  • 6
    @dkar , `fgetcsv` parses the first line ( header ) and returns an array with those columns. Implicitly, the file pointer is now on the 2nd row. – Eduard Aug 05 '15 at 13:20
  • This answer help me. My code is being created with header either 0 or 5th or 6th line. It's dynamic. With this method I iterate the file dynamically with a while whenever I need to find the header I need. Thanks. – Rodolfo Velasco Oct 10 '18 at 17:56
33

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

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

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

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

John Lawrence
  • 2,923
  • 17
  • 23
3

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.

Amir Md Amiruzzaman
  • 1,911
  • 25
  • 24
2

put this inside your while loop:

if ($row == 1) continue;

CrayonViolent
  • 32,111
  • 5
  • 56
  • 79
0

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

if ($row == 1) {
    continue;
}
prehfeldt
  • 2,184
  • 2
  • 28
  • 48
0
$count = 0;
while (($fields = fgetcsv($handle, 0, ",")) !== FALSE) {
    $count++;
    if ($count == 1) { continue; }
Nimish
  • 1
  • 1
0

this worked for me:

$count = 0;

while(! feof($file))

      {

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

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


          }

      $count++;
}
-2

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';
}

?>