Description
In the code below, I'm opening a csv file, seeking to each line and trying to get the contents. $file->current() returns the correct line everytime but $file->key() returns 0 and then 1 for each line. This only happens when with READ_AHEAD and READ_CSV flags are used.
Note that o() is just a wrapper for echo and print_r.
The following code:
<?php
$file = new SplFileObject('import2.csv', 'r');
$file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
$file->seek(0);
o($file->key());
o($file->current());
$file->seek(1);
o($file->key());
o($file->current());
$file->seek(2);
o($file->key());
o($file->current());
$file->seek(3);
o($file->key());
o($file->current());
Resulted in this output:
0
id,status,on_sale,brand,name,link,meta_title,meta_desc,description
1
1,2,15,Samsung,M21,samsung-m21,Samsung M21,Samsung M21,Samsung M21
1
2,2,15,Samsung,M32,samsung-m32,Samsung M32,Samsung M32,Samsung M32
1
3,2,15,Samsung,M21,samsung-m21,Samsung M21,Samsung M21,Samsung M21
But I expected this output instead:
0
id,status,on_sale,brand,name,link,meta_title,meta_desc,description
1
1,2,15,Samsung,M21,samsung-m21,Samsung M21,Samsung M21,Samsung M21
2
2,2,15,Samsung,M32,samsung-m32,Samsung M32,Samsung M32,Samsung M32
3
3,2,15,Samsung,M21,samsung-m21,Samsung M21,Samsung M21,Samsung M21
If I remove READ_CSV flag, the line numbers I get are
Finally, If I remove READ_AHEAD as well, I get the expected output.
Looping through
When not using seek, everything works fine.
$file = new SplFileObject('import2.csv', 'r');
$file->setFlags(SplFileObject::READ_AHEAD | SplFileObject::READ_CSV | SplFileObject::SKIP_EMPTY | SplFileObject::DROP_NEW_LINE);
foreach ($file as $row) {
o($file->key());
}
Outputs
I am attaching the csv file I used as well.
import2.csv
PHP Version
PHP 8.1.2
Operating System
Windows 11, Xampp 3.3.0
Description
In the code below, I'm opening a csv file, seeking to each line and trying to get the contents.
$file->current()returns the correct line everytime but$file->key()returns 0 and then 1 for each line. This only happens when withREAD_AHEADandREAD_CSVflags are used.Note that
o()is just a wrapper forechoandprint_r.The following code:
Resulted in this output:
But I expected this output instead:
If I remove
READ_CSVflag, the line numbers I get areFinally, If I remove
READ_AHEADas well, I get the expected output.Looping through
When not using seek, everything works fine.
Outputs
I am attaching the csv file I used as well.
import2.csv
PHP Version
PHP 8.1.2
Operating System
Windows 11, Xampp 3.3.0