在PHP中,SPLFileObject允许将文件视为迭代器.
然而,有一种我不理解的行为.当您在对象上调用next()时,它会增加key()的值,但不会使文件中的行前进,除非您在每次迭代时调用current().SPL文档声明key()返回当前行号.
代码重现:
的test.txt
0
1
2
3
Run Code Online (Sandbox Code Playgroud)
iterator.php
<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->next();
$fi->next();
echo $fi->current() . "\n"; // prints 1, expecting 3
echo $fi->key() . "\n"; //prints 3
Run Code Online (Sandbox Code Playgroud)
从我所看到的,下一个不是在这个部分工作.如果我这样使用它会提前:
iterator_fix.php
<?php
$fi = new SPLFileObject('test.txt');
echo $fi->current() . "\n"; // prints 0
echo $fi->key() . "\n"; //prints 0
$fi->next();
$fi->current();
$fi->next();
$fi->current();
$fi->next();
echo $fi->current() . "\n"; // prints 3 as expected
echo …
Run Code Online (Sandbox Code Playgroud)