在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 $fi->key() . "\n"; //prints 3
Run Code Online (Sandbox Code Playgroud)
任何人都可以解释这是一个错误或是否是预期的行为?
看着谷歌和PHP论坛,什么都没有出现.提前致谢.
如果已设置READ_AHEAD标志,则SPLFileObject :: next()仅起作用.
$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);
Run Code Online (Sandbox Code Playgroud)