2016-07-27 4 views
0

ArrayIterator::valid() 메서드에 문제가 있습니다. 항상 사실을 반환합니다. 나는 그것이 작동하는 방법을 이해하고, 아니면 내가 뭔가 잘못하고 생각하지 않으면 나는 ArrayIterator의 valid()가 항상 true로 표시됩니다.

내가 뭔가 \Countable\IteratorAggregate 구현 않는 교리의 매기기
http://www.doctrine-project.org/api/orm/2.1/source-class-Doctrine.ORM.Tools.Pagination.Paginator.html

를 사용하여 ... 모르겠어요. getIterator() 메서드는 \ArrayIterator을 반환합니다. 보기에서

내가 할 :

<?php foreach ($this->paginator as $message): ?> 
    <?php var_dump($this->paginator->valid()); ?> // Fatal error. Method does not exist 
    <?php var_dump($this->paginator->getIterator()->valid()); ?> // <-- it always return true 
    <p>Teeeeeest</p> 
<?php endforeach; ?> 

나는 또한 시도 :

<?php $paginator = $this->paginator->getIterator(); ?> 
<?php foreach ($paginator as $message): ?> 
    <?php var_dump($paginator->valid()); ?> // <-- it always return true 
    <p>Teeeeeest</p> 
<?php endforeach; ?> 

var_dump($this->paginator) 내가이 개 기록이 있음을 보여준다. 따라서 첫 번째 반복에서 true을 얻고 두 번째 반복에서 false을 얻어야합니다. 나 맞아? 그렇다면 항상 돌아 오는 이유 true

+0

은'foreach'에만 유효 항목을합니다 (그러나 아마 foreach 문이 반복 후 반복자를 재설정합니다). '$ paginator-> next()'를 사용하면 마지막 항목이 처리 된 후'false'로 끝납니다. – JustOnUnderMillions

답변

1

foreach는 유효한 항목 만 사용하므로 $paginator->valid()은이 시점에서 항상 유효합니다. $paginator->next()을 사용하는 경우 마지막 항목이 처리 된 후 false으로 끝납니다. 그래서 $paginator->valid()

은 그렇게 그것을 테스트 $paginator->next()하지

foreach 내 시도와 함께 사용됩니다.

$paginator->reset(); 
while($paginator->valid()){ 
    $entrie = $paginator->current(); 

    $paginator->next(); 
} 

또는 var_dump($paginator->valid()); foreach는 그것을 테스트한다. `$ paginator-> 유효한()`항상이 시점에서 유효하므로,

:-)

+0

음 .. 감사합니다. 나는 그것을 시험하고 당신의 대답을 받아 들일 것입니다. 나는 한 가지 더 질문이있다. foreach 루프 안에 배열의 마지막 요소인지 어떻게 확인할 수 있습니까? – user1409508

+0

'$ c = $ paginator-> count() - 1; $ idx = 0;'foreach'if ($ idx == $ c) {echo '마지막 엔트리';} $ idx ++;'또는 일부는 그런 – JustOnUnderMillions

관련 문제