#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. спасибо за поддержку, я многому научился из вашего сниппета, очень признателен.