dtvpe4837413 2016-07-27 13:18
浏览 38
已采纳

ArrayIterator的valid()始终显示为true

I have a problem with ArrayIterator::valid() method. It always return true. I don't know if I don't understand how should it work, or am I doing something wrong...

I use Doctrine's Paginator
http://www.doctrine-project.org/api/orm/2.1/source-class-Doctrine.ORM.Tools.Pagination.Paginator.html

It does implement \Countable and \IteratorAggregate. The method getIterator() returns \ArrayIterator.

In view I do:

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

I also tried:

<?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) shows that I have 2 records. So I should get true in first iteration and false in second iteration. Am I correct? So why does it return always true

  • 写回答

1条回答 默认 最新

  • duanming7833 2016-07-27 13:39
    关注

    The foreach takes only valid entries, so $paginator->valid() is always valid at this point. If you use $paginator->next() that will end in false after the last entry was proccessed.

    So $paginator->valid() is used with $paginator->next() not within a foreach

    Try to test it like that.

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

    or test it with var_dump($paginator->valid()); after the foreach. (But maybe the foreach will reset the iterator after iteration)

    :-)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 TLS1.2协议通信解密
  • ¥40 图书信息管理系统程序编写
  • ¥20 Qcustomplot缩小曲线形状问题
  • ¥15 企业资源规划ERP沙盘模拟
  • ¥15 树莓派控制机械臂传输命令报错,显示摄像头不存在
  • ¥15 前端echarts坐标轴问题
  • ¥15 ad5933的I2C
  • ¥15 请问RTX4060的笔记本电脑可以训练yolov5模型吗?
  • ¥15 数学建模求思路及代码
  • ¥50 silvaco GaN HEMT有栅极场板的击穿电压仿真问题