我面临的问题是我有一个读取 CSV 文件的 SplFileObject,然后我将它包装到一个 LimitIterator 中。
CSV 文件有 2 行、标题和 1 行,我将 LimitIterator 偏移量设置为 1,但无法覆盖它,似乎索引存在一些内部问题。
这是代码:
$csvFile = new \SplFileObject($fileName);
$csvFile->setFlags(\SplFileObject::READ_CSV);
$iterator = new \LimitIterator($csvFile, 1);
/** @var \LimitIterator $it */
foreach ($iterator as $it) {
list($.., $.., $..) = $it;
$result[] = [
...
];
}
return $result;
Run Code Online (Sandbox Code Playgroud)
如果 CSV 有 3 行(标题和 2 行),则代码运行良好,但只有标题和 1 行,它不起作用。
任何的想法?
谢谢。
就我个人而言,我会使用 fopen 和 fgetcsv 函数来实现此目的,如下所示;
<?php
$handle = fopen("myFile.csv", "r");
if ($handle != false)
{
$header_row_handled = false;
while ($datarow = fgetcsv($handle, 0, ",")
{
if (!$header_row_handled)
{
$header_row_handled = true;
}
else
{
/* Whatever you need */
$dataparta = $datarow[0];
$datapartb = $datarow[1];
$datapartc = $datarow[2];
}
}
}
Run Code Online (Sandbox Code Playgroud)
循环意味着您每次都可以跳过第一行,并且可能会使用更少的资源,因为您没有那么多对象浮动
php.net页面也应该可以帮助您
| 归档时间: |
|
| 查看次数: |
92 次 |
| 最近记录: |