PHP динамически создает CSV: пропустите первую строку файла CSV

Я пытаюсь импортировать файл 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);
}
?>

person Nathan Dunn    schedule 05.06.2012    source источник


Ответы (6)


Поскольку вы все равно отслеживаете номер строки, вы можете использовать continue, чтобы пропустить оставшуюся часть цикла для первой строки.

Например, добавьте это в начало цикла while (чуть выше $num = count($data)):

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

Есть и другие способы сделать это, но просто убедитесь, что когда вы продолжите, $row все еще увеличивается, иначе вы получите бесконечный цикл!

person John Lawrence    schedule 05.06.2012

Вместо использования условия 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) {
.......
.......

Так же просто......

person Rahul Gupta    schedule 08.10.2013
comment
@dkar, fgetcsv анализирует первую строку (заголовок) и возвращает массив с этими столбцами. Неявно указатель файла теперь находится во 2-й строке. - person Eduard; 05.08.2015
comment
Этот ответ поможет мне. Мой код создается с заголовком либо 0, либо 5-й, либо 6-й строкой. Это динамично. С помощью этого метода я динамически перебираю файл через некоторое время всякий раз, когда мне нужно найти нужный заголовок. Спасибо. - person Rodolfo Velasco; 10.10.2018

поместите это в свой цикл while:

if ($row == 1) continue;

person Crayon Violent    schedule 05.06.2012

Пожалуйста, используйте следующие строки кода

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

Если для переменной флага установлено значение true и установлено значение false, первая строка CSV-файла будет пропущена. Это просто и легко реализовать.

person Amir Md Amiruzzaman    schedule 29.12.2017

Добавьте это в тело цикла while над $row++;:

if ($row == 1) {
    continue;
}
person prehfeldt    schedule 05.06.2012

это сработало для меня:

$count = 0;

while(! feof($file))

      {

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

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


          }

      $count++;
}
person Louis Ferreira    schedule 26.06.2017