在 PHP 中,SPLFileObject 允许将文件视为迭代器。
但是有一种我不理解的行为。当您在对象上调用 next() 时,它会增加 key() 的值,但不会推进文件中的行,除非您在每次迭代时调用 current()。SPL 文档声明 key() 返回当前行号。
重现代码:
测试.txt
0
1
2
3
迭代器.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
据我所知,下一个不在这部分工作。如果我这样使用它会进步:
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
谁能解释这是一个错误还是预期的行为?
查看了谷歌和php论坛,没有任何结果。提前致谢。