使用fgetcsv跳过行

时间:2014-01-27 14:38:37

标签: php row fgetcsv

 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的数据库行数,然后我希望从该行开始。

你有什么想法吗?

2 个答案:

答案 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

每次删除的计数器