public function loadCSV()
{
$file = fopen($this->path, 'r');
$dbcnt = $this->getdbrows();
while(!feof($file))
{
if(fgetcsv($file)[$this->group] == '610')
{
$date = fgetcsv($file)[$this->datePos];
$num = $this->formatNum(fgetcsv($file)[$this->numPos]);
$rec = fgetcsv($file)[$this->recPos];
if(!(in_array($num, $this->filter)))
{
array_push($this->csvitem, $date . ';' . $num . ';' . $rec);
}
}
}
$this->writeCSV();
}
所以我使用fopen
加载一个csv文件,然后逐行检查并保存日期,num和rec到它们的变量。但是,因为我一遍又一遍地阅读同一个文件。我希望不要一遍又一遍地存储旧数据。因此,我获得了$dbcnt
的数据库行数,然后我希望从该行开始。
你有什么想法吗?
答案 0 :(得分:1)
我会使用SplFileObject
。它非常快,并支持一个很好的基于行的搜索功能:
public function loadCSV() {
$file = new SplFileObject($this->path);
$dbcnt = $this->getdbrows();
$file->seek($dbcnt); // <---- here
while (!$file->eof()) {
$record = $file->fgetcsv();
if ($record[$this->group] == '610') {
.. and so on..
答案 1 :(得分:0)
来自@ ex3v的这个链接对我有所帮助 How do I open a file from line X to line Y in PHP?
所有我需要来自$dbcnt
的部分是if声明
if($dbcnt >= $line)
{
}
其中$line
是fgetcsv