Php 使用fgetcsv跳过行
因此,我使用Php 使用fgetcsv跳过行,php,row,fgetcsv,Php,Row,Fgetcsv,因此,我使用fopen加载一个csv文件,然后逐行遍历它,并将date、num和rec保存到它们的变量中。但是,因为我一遍又一遍地读同一个文件。我不希望反复存储旧数据。因此,我用$dbcnt获得db行数,然后我希望从该行开始 你有什么想法吗?我会用。它速度非常快,并且支持一个很好的基于线的搜索功能: public function loadCSV() { $file = fopen($this->path, 'r');
fopen
加载一个csv文件,然后逐行遍历它,并将date、num和rec保存到它们的变量中。但是,因为我一遍又一遍地读同一个文件。我不希望反复存储旧数据。因此,我用$dbcnt
获得db行数,然后我希望从该行开始
你有什么想法吗?我会用。它速度非常快,并且支持一个很好的基于线的搜索功能:
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();
}
公共函数loadCSV(){
$file=新的SplFileObject($this->path);
$dbcnt=$this->getdbrows();
$file->seek($dbcnt);//eof()){
$record=$file->fgetcsv();
如果($record[$this->group]==“610”){
等等
来自@ex3v的链接确实帮助了我
我所需要的$dbcnt
中的一个部分就是一个if语句
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..
其中,
$line
是fgetcsv的每次恢复的计数器如果有人从您的文件中删除旧行,会发生什么?不会发生这种情况。请查看此线程:此时您仍在读取整个文件。您不会“从该行开始”,你从那一排继续读到那一点。结果:你一无所获。
if($dbcnt >= $line)
{
}