如果object limititerator为空,如何编写不运行下面的foreach的条件?

$numbers = array(5, 19, 8, 35, 50);

$iterator = new ArrayIterator($numbers);

$limiter = new LimitIterator($iterator, 5, 2);

foreach($limiter as $number)
{
    echo $number.'<br/>';
}

上面的代码返回这个错误,
Fatal error: Uncaught exception 'OutOfBoundsException' with message 'Seek position 5 is out of range' in ..
OutOfBoundsException: Seek position 5 is out of range in..

如果object limititerator为空,我不想运行foreach
编辑:
为什么$limiter->valid();总是返回false?我的网站上有一个page运行下面的代码,
$numbers = array(5, 19, 8, 35, 50);

$iterator = new ArrayIterator($numbers);

$limiter = new LimitIterator($iterator, 0, 2);

var_dump($limiter->valid());

if ($limiter->valid())
{
    foreach($limiter as $number)
    {
        echo $number.'<br/>';
    }
}

最佳答案

OutOfBoundsException在倒带后试图在LimitIterator循环的最开始处寻找起始偏移量时,foreach被抛出。
如果要测试寻道位置是否正常,请在rewind()块中seek()或手动try/catch

try {
    $limiter->rewind();
} catch (OutOfBoundsException $e) {
    // Do whatever
}

当然,您可以将foreach循环包装在try/catch块中。
为什么$limiter->valid();总是返回false
它并不总是返回false,只有当它不在有效位置时。
脚本中的LimitIterator在调用valid()时,没有被告知要沿着自身或内部迭代器移动任何位置。在调用rewind()seek()之前,它不可能处于有效位置。

10-01 18:10