限制处理的csv行数

  • 本文关键字:csv 行数 处理 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);
}

这也是我的makecsv方法。

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

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)) && $csv_limit > $rowCount++) {
if ($skip_header == 0) {
$skip_header++;
continue;
}
$this->csv_rows[] = array_intersect_key($fields, $idsColumnsWanted);
}

最新更新