首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用PHP - SPL解决方案反向迭代数组?

使用PHP - SPL解决方案反向迭代数组?
EN

Stack Overflow用户
提问于 2011-03-16 01:25:34
回答 11查看 33.1K关注 0票数 26

PHP中有SPL反转数组迭代器吗?如果没有,什么是实现它的最好方法?

我可以简单的做

代码语言:javascript
复制
$array = array_reverse($array);
foreach($array as $currentElement) {}

代码语言:javascript
复制
for($i = count($array) - 1; $i >= 0; $i--)
{

}

但是有没有更优雅的方式呢?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2011-03-16 02:01:55

没有ReverseArrayIterator可以做到这一点。你可以做到

代码语言:javascript
复制
$reverted = new ArrayIterator(array_reverse($data));

或者将其添加到您自己的自定义迭代器中。

代码语言:javascript
复制
class ReverseArrayIterator extends ArrayIterator 
{
    public function __construct(array $array)
    {
        parent::__construct(array_reverse($array));
    }
}

不使用array_reverse但通过标准数组函数迭代数组的稍微长一点的实现是

代码语言:javascript
复制
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);
    }
}
票数 11
EN

Stack Overflow用户

发布于 2014-09-10 23:52:06

下面是一个不复制也不修改数组的解决方案:

代码语言:javascript
复制
for (end($array); key($array)!==null; prev($array)){
  $currentElement = current($array);
  // ...
}

如果您还想引用当前键:

代码语言:javascript
复制
for (end($array); ($currentKey=key($array))!==null; prev($array)){
  $currentElement = current($array);
  // ...
}

这总是有效的,因为php数组键永远不会为空,并且比这里给出的任何其他答案都要快。

票数 64
EN

Stack Overflow用户

发布于 2011-03-16 01:33:24

代码语言:javascript
复制
$item=end($array);
do {
...
} while ($item=prev($array));
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5315539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档