PHP中有SPL反转数组迭代器吗?如果没有,什么是实现它的最好方法?
我可以简单的做
$array = array_reverse($array);
foreach($array as $currentElement) {}或
for($i = count($array) - 1; $i >= 0; $i--)
{
}但是有没有更优雅的方式呢?
发布于 2011-03-16 02:01:55
没有ReverseArrayIterator可以做到这一点。你可以做到
$reverted = new ArrayIterator(array_reverse($data));或者将其添加到您自己的自定义迭代器中。
class ReverseArrayIterator extends ArrayIterator
{
public function __construct(array $array)
{
parent::__construct(array_reverse($array));
}
}不使用array_reverse但通过标准数组函数迭代数组的稍微长一点的实现是
class ReverseArrayIterator implements Iterator
{
private $array;
public function __construct(array $array)
{
$this->array = $array;
}
public function current()
{
return current($this->array);
}
public function next()
{
return prev($this->array);
}
public function key()
{
return key($this->array);
}
public function valid()
{
return key($this->array) !== null;
}
public function rewind()
{
end($this->array);
}
}发布于 2014-09-10 23:52:06
下面是一个不复制也不修改数组的解决方案:
for (end($array); key($array)!==null; prev($array)){
$currentElement = current($array);
// ...
}如果您还想引用当前键:
for (end($array); ($currentKey=key($array))!==null; prev($array)){
$currentElement = current($array);
// ...
}这总是有效的,因为php数组键永远不会为空,并且比这里给出的任何其他答案都要快。
发布于 2011-03-16 01:33:24
$item=end($array);
do {
...
} while ($item=prev($array));https://stackoverflow.com/questions/5315539
复制相似问题