如何使用ArrayIterator的previous()方法回到前一个条目并获取page1?
问题解决:ArrayIterator的previous()方法及元素定位
问题场景
现有PHP代码如下:
$list = new ArrayIterator(array('page1', 'page2', 'page3', 'page4')); echo $list->current(); // 'page1' $list->next(); echo $list->current(); // 'page2' // 期望实现的功能 $list->previous(); echo $list->current(); // 'page1'
需要实现:调用ArrayIterator的previous()方法从page2回到page1;同时需要知道在处于page2状态时,如何获取第一个元素page1(注:原问题中“最后一个元素page1”应为笔误,page1是数组首个元素,最后一个元素为page4,下方也会补充获取最后一个元素的方法)。
解决方案
1. 调用previous()回到前一个元素
ArrayIterator原生支持previous()方法,你的期望代码本身就是有效的,直接执行即可达成需求:
$list = new ArrayIterator(array('page1', 'page2', 'page3', 'page4')); echo $list->current() . PHP_EOL; // 输出:page1 $list->next(); echo $list->current() . PHP_EOL; // 输出:page2 // 回到前一个元素page1 $list->previous(); echo $list->current() . PHP_EOL; // 输出:page1
说明:迭代器调用next()后指针移动到索引1(对应page2),此时调用previous()会将指针回退到索引0(对应page1),完全符合你的需求。
2. 在page2状态下获取第一个元素page1
有三种常用方法:
方法一:使用rewind()重置指针
将迭代器指针重置到起始位置,再获取当前元素:$list = new ArrayIterator(array('page1', 'page2', 'page3', 'page4')); $list->next(); // 当前处于page2 $list->rewind(); // 指针回到起始位置 echo $list->current(); // 输出:page1方法二:直接通过索引访问
由于ArrayIterator实现了ArrayAccess接口,可以直接像操作普通数组一样通过索引取值:$list = new ArrayIterator(array('page1', 'page2', 'page3', 'page4')); $list->next(); // 当前处于page2 echo $list[0]; // 输出:page1方法三:使用seek()跳转索引
通过seek()方法直接跳转到索引0的位置:$list = new ArrayIterator(array('page1', 'page2', 'page3', 'page4')); $list->next(); // 当前处于page2 $list->seek(0); // 跳转到索引0 echo $list->current(); // 输出:page1
补充:如果需要获取最后一个元素page4
若你实际需求是获取数组最后一个元素page4,可以用以下方法:
$list = new ArrayIterator(array('page1', 'page2', 'page3', 'page4')); $list->next(); // 当前处于page2 // 方法一:通过seek()跳转至最后一个索引 $list->seek($list->count() - 1); echo $list->current() . PHP_EOL; // 输出:page4 // 方法二:直接通过索引访问 echo $list[$list->count() - 1] . PHP_EOL; // 输出:page4
内容的提问来源于stack exchange,提问作者Reynadan
相关产品推荐
相关产品推荐

