Ограничить количество обрабатываемых строк csv

#php

#php

Вопрос:

У меня есть небольшой скрипт, который обрабатывает CSV и выводит другой CSV.

Я хотел включить дополнительный ограничитель, чтобы остановить обработку CSV на желаемом ограничителе.

Я пробовал do while и это for loop , и ни одна из них не работает.

CSV — это всегда каждая строка, а не предельное значение csv?

   public function get_csv($csv_limit)
  {
    $file = fopen($this->csv_url, "r");
    $rows = [];
    $idsColumnsWanted = array_flip(array_keys($this->csv_headers));
    $skip_header = 0;
    
    for ($i = 0; $i <= $csv_limit; $i  )
    {
      while (false !== $fields = fgetcsv($file)) {
        if ($skip_header == 0) {
          $skip_header  ;
          continue;
        }
        $this->csv_rows[] = array_intersect_key($fields, $idsColumnsWanted);
      }
    }

    fclose($file);
  }
  

Вот мой метод make csv.

   public function make_csv()
  {
    $csv_file_name = $this->csv_file_name . "_" . date("Y-m-d_H-i-s",time()) . ".csv";
    $csv_init = fopen($csv_file_name, "w");
    
    fputcsv($csv_init, $this->csv_headers, ",", '"');
    
    foreach ($this->csv_rows as $row) {
      fputcsv($csv_init, $row);
    }
    
    fclose($csv_init);
}
  

Ответ №1:

   public function get_csv($csv_limit)
  {
    $file = fopen($this->csv_url, "r");
    $rows = [];
    $idsColumnsWanted = array_flip(array_keys($this->csv_headers));
    
    for ($i = 0; $i <= $csv_limit; $i  )
    {
      $fields = fgetcsv($file);
      if ($fields === false) break;
      if ($i === 0) continue;
      $this->csv_rows[] = array_intersect_key($fields, $idsColumnsWanted);

    }

    fclose($file);
  }
  

Ответ №2:

Затем в for цикле вы продолжаете и используете while цикл для чтения всех строк…

 for ($i = 0; $i <= $csv_limit; $i  )
{
  while (false !== $fields = fgetcsv($file)) {  // This reads the entire file
  }
}
  

Вместо этого вы можете просто использовать цикл while, но подсчитывать выводимые строки…

 $rowCount=0;
while ((false !== $fields = fgetcsv($file)) amp;amp; $csv_limit > $rowCount  ) {
    if ($skip_header == 0) {
        $skip_header  ;
        continue;
    }
    $this->csv_rows[] = array_intersect_key($fields, $idsColumnsWanted);
}
  

Комментарии:

1. спасибо за поддержку, я многому научился из вашего сниппета, очень признателен.