문제

PHP에서는 SPLFileObject를 사용하여 파일을 반복자로 처리할 수 있습니다.

그런데 이해할 수 없는 행동이 있습니다.객체에 대해 next()를 호출하면 key()의 값이 증가하지만 각 반복마다 current()를 호출하지 않으면 파일의 줄이 앞으로 이동하지 않습니다.SPL 문서에는 key()가 현재 줄 번호를 반환한다고 명시되어 있습니다.

재현할 코드:

테스트.txt

0
1
2
3

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

내가 볼 수 있듯이 다음 섹션에서는 이 섹션이 작동하지 않습니다.이런 식으로 사용하면 발전할 것입니다.

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);

다른 팁

글쎄, 어쨌든 foreach와 함께 사용하는 것은 어떻습니까?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top