gpt4 book ai didi

php - SPLFileObject next() 行为

转载 作者:可可西里 更新时间:2023-11-01 00:18:03 24 4
gpt4 key购买 nike

在 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

据我所知,next 不适用于此部分。如果我这样使用它会进步:

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

谁能解释这是一个错误还是预期的行为?

查看了 google 和 php 论坛,没有任何结果。提前致谢。

最佳答案

SPLFileObject::next() 仅在 READ_AHEAD 时有效标志已设置。

$fi = new SPLFileObject('test.txt');
$fi->setFlags(SPLFileObject::READ_AHEAD);

关于php - SPLFileObject next() 行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1504927/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com